集训队的药药切克闹
TimeLimit: 1000 ms MemoryLimit: 65535 K
64-bit integer IO format:
%I64d
已解决 |
点击收藏
Problem Description
ACM队员LH听到了中国大妈广场舞的音乐,它的旋律就是呦呦切克闹,大妈说旋律完美重复的就是好的曲子,像“abcabc”,于是LH就在广场学起了广场舞,曲子一首接一首的放过去,LH发现有的歌不是完美曲子,他现在要挑出不是完美的曲子如果是完美曲子就输出“Win”否则输出“Lost”;
Input
输入数据有多行,每行输入一个字符串,长度小于等于100000.请问该字符串是不是重复串. 重复串即:假设 A = "abc",字符只可能是小写字母. AA(abcabc),AAA,或者更多个A形式存在即为重复串.
Output
对于每行数据,如果是重复串输出Win,否则输出Lost.
SampleInput
abaaba aba
SampleOutput
Win Lost
听说暴力匹配能过
1 #include<stdio.h> 2 #include<string.h> 3 #define MAXN 100005 4 /** 5 通过KMP算法的计算next数组 6 然后输出next数组发现规律 7 就可以发现满足len%(len-next[len])==0&&(next[len]!=0&&len!=1) 8 就是WIN 9 否则就是LOST 10 **/ 11 int next[MAXN]; 12 char word[MAXN]; 13 void KMPGET(char word[]) 14 { 15 int len=strlen(word); 16 int k=-1; 17 int j=0; 18 next[0]=-1; 19 while(j<len) 20 { 21 if(k==-1||word[j]==word[k]) 22 { 23 j++; 24 k++; 25 next[j]=k; 26 } 27 else 28 k=next[k]; 29 } 30 } 31 int main() 32 { 33 while(~scanf("%s",word)) 34 {memset(next,0,sizeof(next)); 35 KMPGET(word); 36 int len=strlen(word); 37 if(len%(len-next[len])==0&&(next[len]!=0&&len!=1)) 38 printf("Win\n"); 39 else 40 printf("Lost\n"); 41 42 } 43 return 0; 44 }