delete pics to save space
This commit is contained in:
51
7.3974.cpp
Normal file
51
7.3974.cpp
Normal file
@ -0,0 +1,51 @@
|
||||
#include<cstdio>
|
||||
#include<cstring>
|
||||
#include<algorithm>
|
||||
using namespace std;
|
||||
const int maxn=1000005;
|
||||
const int P=13141;
|
||||
char s[maxn],rs[maxn];
|
||||
int n,kase;
|
||||
unsigned long long H[maxn],RH[maxn],pm[maxn];
|
||||
int solve()
|
||||
{
|
||||
n=strlen(s+1);
|
||||
memcpy(rs,s,n+1);
|
||||
reverse(rs+1,rs+1+n);
|
||||
for(int i=1;i<=n;i++) H[i]=H[i-1]*P+(s[i]-'a'+1);
|
||||
for(int i=1;i<=n;i++) RH[i]=RH[i-1]*P+(rs[i]-'a'+1);
|
||||
int res=0;
|
||||
for(int i=1,ri=n;i<=n;i++,ri--) // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>,<2C><>s[i]Ϊ<><CEAA><EFBFBD><EFBFBD>
|
||||
{
|
||||
int L=0,R=min(i-1,n-i),M,now=0;
|
||||
while(L<=R)
|
||||
{
|
||||
M=(L+R)>>1;
|
||||
if(H[i-1]-H[i-1-M]*pm[M]==RH[ri-1]-RH[ri-1-M]*pm[M]) L=M+1,now=M;
|
||||
else R=M-1;
|
||||
}
|
||||
res=max(res,now*2+1);
|
||||
}
|
||||
for(int i=2,ri=n-1;i<=n;i++,ri--) // <20><><EFBFBD><EFBFBD>Ϊż<CEAA><C5BC>,<2C><>s[i-1]<5D><>s[i]Ϊ<><CEAA><EFBFBD><EFBFBD>
|
||||
{
|
||||
int L=0,R=min(i-1,n-i+1),M,now=0;
|
||||
while(L<=R)
|
||||
{
|
||||
M=(L+R)>>1;
|
||||
if(H[i-1]-H[i-1-M]*pm[M]==RH[ri]-RH[ri-M]*pm[M]) L=M+1,now=M;
|
||||
else R=M-1;
|
||||
}
|
||||
res=max(res,now*2);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
int main()
|
||||
{
|
||||
#ifdef local
|
||||
freopen("pro.in","r",stdin);
|
||||
#endif
|
||||
pm[0]=1;
|
||||
for(int i=1;i<=1000000;i++) pm[i]=pm[i-1]*P;
|
||||
while(scanf("%s",s+1),strcmp(s+1,"END")) printf("Case %d: %d\n",++kase,solve());
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user