CodeForces 7D Palindrome Degree
来源:互联网 发布:谢馥春198鸭蛋粉 知乎 编辑:程序博客网 时间:2024/05/16 18:15
字符串hash。首先说下需要注意的地方:当对Mod取余时,可能造成本不相同的,取余结束之后相同了。
此时应对多个不同的Mod取余,多次计算只能说降低上述情况的发生。感觉正式比赛中不会有这种题,比较拼RP。
比如此题,Mod = 2^32,可以,Mod = 2^64,WA了。。。
#include <algorithm>#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <queue>#include <cmath>#include <stack>#include <map>#include <ctime>#include <iomanip>#pragma comment(linker, "/STACK:1024000000");#define EPS (1e-6)#define LL long long#define ULL unsigned long long#define _LL __int64#define INF 0x3f3f3f3f#define Mod 1000000007using namespace std;const int MAXN = 5000010;char s[MAXN];ULL e = 256;ULL pre[MAXN],suf[MAXN];ULL p1[MAXN],s1[MAXN];LL K[MAXN];int main(){ scanf("%s",s+1); int i,n = strlen(s+1); for(i = 1,pre[0] = 0;i <= n; ++i) pre[i] = pre[i-1]*e + s[i]; for(i = 2,suf[1] = s[1];i <= n; ++i) suf[i] = suf[i-1] + s[i]*e,e *= 256; e = 256; for(i = 1,p1[0] = 0;i <= n; ++i) { p1[i] = p1[i-1]*e + s[i]; p1[i] %= Mod; } for(i = 2,s1[1] = s[1];i <= n; ++i) { s1[i] = s1[i-1] + s[i]*e,e *= 256; e %= Mod,s1[i] %= Mod; } K[0] = 0; for(K[0] = 0,i = 1;i <= n; ++i) { if(pre[i] == suf[i] && p1[i] == s1[i]) K[i] = K[i/2] + 1; else K[i] = 0; } LL ans = 0; for(i = 1;i <= n; ++i) ans += K[i]; printf("%I64d\n",ans); return 0;}
0 0
- CodeForces - 7D Palindrome Degree
- CodeForces 7D Palindrome Degree
- codeforces 7D Palindrome Degree
- codeforces 7D Palindrome Degree 字符串hash
- CodeForces 7D Palindrome Degree 字符串hash
- Codeforces Beta Round #7 D. Palindrome Degree
- Codeforces Beta Round #7, problem: (D) Palindrome Degree
- Codeforces 7D Palindrome Degree 字符串hash DP
- Codeforces Beta Round #7--D. Palindrome Degree(hash)
- Codeforces Beta Round #7--D. Palindrome Degree(Manacer)
- Codeforces Beta Round #7 D. Palindrome Degree —— hash
- CF 7D: Palindrome Degree
- Codeforce 7D Palindrome Degree
- [数据结构-hash]CF 7D Palindrome Degree
- #7 D. Palindrome Degree (manacher + dp)
- [codeforces] 501E - Misha and Palindrome Degree
- codeforces 159D Palindrome pairs
- codeforces 159D Palindrome pairs
- 具有中国特色的docker折腾记(下)
- 项目5.1
- 嵌入式(embed)Tomcat的使用
- oracle导出数据到文本、从文本导入数据
- 使用构建工具gradle打包时,遇到的中文问题和解决方案
- CodeForces 7D Palindrome Degree
- unity 断点下载
- Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令 详细的
- leetcode:pascal's_triangle_II
- C++字符串分割
- apache与php的通信过程
- 屏蔽一些广告网站
- ubuntu 12.04中安装svn服务器
- hdu 5080 2014ACM/ICPC鞍山K题 polya计数