FJUT ACM 1212 集训队的药药切克闹

集训队的药药切克闹

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 }
View Code

 

posted @ 2018-04-17 22:22  moxin0509  阅读(189)  评论(0编辑  收藏  举报