坑了我好久,乍看很简单,记忆化搜索结果爆栈,然后改成递推之后WA 。 后来发现,是在计算m=3的数据时出现了错误,因为当m=3时,即使n很小,结果也会很大,所以无法利用m=2时的结果递推,要怎么办呢? 将m=2的结果打印出来可以发现这是一个等差数列,通项为S(n) = 2*n + 3;
这有什么用呢? 我们可以发现,当 m=3时由递推式可以写成A(m,n) = A(2,A(m,n-1)) = ...
分类:
其他好文 时间:
2015-08-30 11:22:07
阅读次数:
168
KMP算法假定了解案件的原则,其实很easy。KMP算法简述关于根据自己的理解在这里。KMP三位发明者(Knuth、Morris、Pratt)的首字母组成,又称字符串查找算法。个人认为能够理解为最小回溯算法,即匹配失效的时候,尽量少回溯。从而缩短时间复杂度。KMP算法有两个关键的地方,1)求解nex...
分类:
编程语言 时间:
2015-08-25 18:22:57
阅读次数:
155
题意:有n个操作,操作种类有A a b表示把区间[a,b]的值依次加1 2 … b-a+1,操作B a b表示把区间[a,b]的值依次加b-a+1… 2 1,操作C a b x表示把区间[a,b]的值全部替换为x,操作S a b要求输出区间[a,b]里的所有数字的和。
题解:A和B操作都是把区间内加上一个等差数列,所以要用线段树维护每个区间所要加的等差数列的首项还有公差,注意操作C里的x还可以取负...
分类:
其他好文 时间:
2015-08-20 20:57:57
阅读次数:
159
题意:
首先,现在给出三个数字n,d1,d2。然后第二行给出n个数字。
然后题目要求的是求这个序列中有几个区间满足一下条件之一:
1)这个区间是一个等差数列,且公差为d1或d2;
2)若一个区间为[l,r],那么有l
*注意,这里单个数字一定是满足等差数列的。而且这里数字最好都使用__int64来保存,因为这个原因我们队WA了好几次。
思路:
这里我设了头和尾两个指针,分别用l和r表...
分类:
其他好文 时间:
2015-08-20 06:48:50
阅读次数:
92
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5400
题意:给定等差数列的差值d1,d2,问长度为n的数列中有多少个满足条件的子序列,条件为子序列中存在一个xi满足前半段是差值为d1的等差数列,后半段是差值为d2的等差数列
思路:
首先预处理出来出ii这个位置向前d_1d?1??的等差序列和向后d_2d?2??的等差数列能延续到多长,记作...
分类:
其他好文 时间:
2015-08-19 20:47:04
阅读次数:
104
1.题目描述:点击打开链接
2.解题思路:本题利用扫描法解决。根据题意描述,[L,i)和[i,R)区间都构成了等差数列,因此可以实现用L[i],R[i]来维护从i开始向左向右可以延伸的最远长度,如果d1和d2不等,那么答案就是L[i]*R[i]求和,否则就是R[i]求和。
3.代码:
//#pragma comment(linker, "/STACK:1024000000,102400000...
分类:
其他好文 时间:
2015-08-19 00:42:44
阅读次数:
161
hdu 5400 Arithmetic Sequence分析: 首先预处理出来出ii这个位置向前d_1 d?1的等差序列;
向后d_2 d?2的等差数列能延续到多长,记作l_i,r_i l?i,r?i
如果d_1!=d_2 d?1≠d2,那么枚举中间位置,答案为l_i*r_i l?i?r?i
如果d_1 =d_2 d?1=d?2,枚举开始位置,答案为r_i r?i
代码:#include...
分类:
其他好文 时间:
2015-08-19 00:38:02
阅读次数:
136
题意:
给出一个数组a,叫你每次询问如下等式的值。
f(l,r)=∑ri=l∑rj=igcd(ai,ai+1....aj)f(l,r)=\sum_{i=l}^{r}\sum_{j=i}^{r}gcd(a_i,a_{i+1}....a_{j})
解析:
思考了很久终于理解了学长的思路
给你一个序列,这个序列的子序列gcd的个数不会超过logN个(N为每个数字,最大能取到的范围)...
分类:
其他好文 时间:
2015-08-16 10:48:37
阅读次数:
103
题目链接:hdu 5381 The sum of gcd
将查询离线处理,按照r排序,然后从左向右处理每个A[i],碰到查询时处理。用线段树维护,每个节点表示从[l,i]中以l为起始的区间gcd总和。所以每次修改时需要处理[1,i-1]与i的gcd值,但是因为gcd值是递减的,成log级,对于每个gcd值记录其区间即可。然后用线段树段修改,但是是修改一个等差数列。
#inclu...
分类:
其他好文 时间:
2015-08-15 11:56:05
阅读次数:
125
题意:告诉n组A,B,C,按照A + k * C生成等差数列,问这n组数列中哪个数字出现了奇数次以及出现了几次,题目保证最多只会出现一个这种数字。分析:读完题并没有思路,后来知道是二分区间,枚举是哪个数字出现了奇数次,算该数字之前一共有几个数字,如果是奇数个,说明答案就在[L , Mid]中。PS:...
分类:
其他好文 时间:
2015-08-10 21:50:16
阅读次数:
112