
常用技巧——前缀和
文章平均质量分 80
XDU_Skyline
Everything is over, everything is just beginning.
展开
-
#294 (div.2) D.A and B and Interesting Substring
1.题目描述:点击打开链接2.解题思路:本题要求在s中找满足下列条件的字串:(i)i+1~j-1的字符串权值之和为0;(ii)s[i]==s[j];处理带权字符串的一般解法是利用前缀和。但我最初的算法效率十分低下:先求出前i个字符的权和。并将26个字母出现的位置依次保存到vector中。随后从0~len依次枚举每个位置的字符s[i],并枚举它的下一个出现位置,再计算这段子串是否满足条件(1)。原创 2015-03-01 16:15:03 · 729 阅读 · 0 评论 -
习题10-7 几乎是素数 UVa10539
1.题目描述:点击打开链接2.解题思路:本题要求找在区间[L,R]中素因子只有一个且自身不是素数的数,这实际上就是找素因子的幂次大于1的数在该区间中有几个。可以利用前缀和的思想,用cal(k)表示不超过k的这样的数有几个,那么最终的答案就是cal(R)-cal(L-1)。而cal()函数可以通过逐一尝试素数计算最大幂次来得到。当p>sqrt(k)时即可停止枚举。注意要用long long输原创 2015-04-21 00:07:57 · 817 阅读 · 0 评论 -
HDU 1003 Max Sum
1.题目描述:点击打开链接2.解题思路:本题是经典的最大连续和问题,效率高的解决方法有两种:(1)利用公式:A[i]+A[i+1]+...+A[j]=S[j]-S[i-1];(2)利用动态规划;(3)边读入边计算(精简版的动态规划)。对于(1),二重循环还是会TLE的,应该事先计算好0~j之间的最小值及其位置。对于(2)定义d(i)表示以i结尾的最大连续字串的和,再用一个辅助变量保存开始值s,原创 2015-02-12 20:55:27 · 518 阅读 · 0 评论