哈哈,又坑了一个人
这道题是求最少添上几个字母是一个字符串是会文的
然后正反都弄个hash的数组,从n到1依此判断是否能对上。。。
例如:abbbbbbbbbbbbbb
bbbbbbbbbbbbbba这是n=n-1时的情况,然后全是b,就可以跳出了,这时的答案就是1~。。
http://acm.dlut.edu.cn/problem.php?id=1250
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int base = 51;
const int maxn = 1100000 ;
typedefunsigned long long ll;
ll hash1[maxn],hash2[maxn],xp[maxn];
char s[maxn];
int main()
{
xp[0]=1;
for(inti=1;i<maxn;i++)
xp[i]=xp[i-1]*base;
intn;
cin>>n;
getchar();
while(n--)
{
scanf("%s",s);
intl=strlen(s);
memset(hash1,0,sizeof(hash1));
memset(hash2,0,sizeof(hash2));
for(inti=l-1;i>=0;i--)
{
hash1[i]=hash1[i+1]*base+s[i]-'a'+1;
hash2[i]=hash2[i+1]*base+s[l-i-1]-'a'+1;
}
inti;
for(i=0;i<l;i++)
if(hash1[i]==hash2[0]-hash2[l-i]*xp[l-i])break;
cout<<i<<endl;
}
return0;
}