标签:can integer please and inpu fine ati end include
http://acm.hdu.edu.cn/showproblem.php?pid=4333
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
#include<cstdio> #include<iostream> #include<cstring> #define N 200100 using namespace std; int nxt[N],cas,len; char T[N]; int f[N]; void kmp() { int j; for(int i=1;i<len;i++) { j=f[i]; while(j && T[i]!=T[j]) j=f[j]; f[i+1]= T[i]==T[j] ? j+1 : 0; } } void getnxt() { int a=0,Tlen=strlen(T); nxt[0]=Tlen; while(a<Tlen-1 && T[a]==T[a+1]) a++; nxt[1]=a; a=1; for(int k=2;k<Tlen;k++) { int p=a+nxt[a]-1,L=nxt[k-a]; if(k-1+L>=p) { int j=(p-k+1>0) ? p-k+1 : 0; while(k+j<Tlen && T[k+j]==T[j]) j++; nxt[k]=j; a=k; } else nxt[k]=L; } } int main() { int t; scanf("%d",&t); while(t--) { scanf("%s",T); len=strlen(T); kmp(); int k=len-f[len],tt; if(len%k==0) tt=len/k; else tt=1; for(int i=0;i<len;i++) T[len+i]=T[i]; getnxt(); int num1=0,num2=0,num3=0; for(int i=0;i<len;i++) { if(nxt[i]>=len) num2++; else if(T[nxt[i]]>T[i+nxt[i]]) num1++; else num3++; } printf("Case %d: %d %d %d\n",++cas,num1/tt,num2/tt,num3/tt); } }
标签:can integer please and inpu fine ati end include
原文地址:http://www.cnblogs.com/TheRoadToTheGold/p/7043820.html