PKU 2406 Power Strings
http://poj.org/problem?id=2406
文字列aとbがある時、a*bはaの後ろにbをつなげたものを意味する。(stringクラスでいうところのa+b)。また、a^n=a*(a^(n-1))となるとする。
この時、文字列sが与えられ、a^n=sとなるような最大のnを求めるという問題。
やや易?
TLEが怖かったが、愚直にやっても多少余裕はあった。100ms台でACするアルゴリズムがきになる。
char in[1000010]; main(){ while(scanf("%s",in)){ if(in[0]=='.')break; int len=strlen(in); int ans=0; for(int i=1;i<=len;i++){ if(len%i)continue; int pos=0; while(i+pos<len && in[pos%i]==in[pos+i])++pos; if(i+pos==len){ ans=len/i; break; } } printf("%d\n",ans); } }