codeforces 349 div2.c

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <set>
 4 #include <iostream>
 5 #include <map>
 6 #include <math.h>
 7 #include <algorithm>
 8 using namespace std;
 9 typedef long long ll;
10 const int N = 1000005;
11 const double pi= 3.14159265358979323846264;
12 bool val[10009];
13 set<string>ans;
14 
15 int main()
16 {
17     //freopen("in.txt","r",stdin);
18    string s;
19     cin>>s;
20     int l=s.length();
21     val[l]=true;
22     for(int i=l-1;i>4;i--){
23         if(val[i+2]){
24             string t=s.substr(i,2);//直接求子串
25             if(s.find(t,i+2)!=i+2||val[i+5]){//find表示从i+2位置开始找第一个与t相等字符串的位置
26                 val[i]=true;
27                 ans.insert(t);
28             }
29         }
30           if(val[i+3]){
31             string t=s.substr(i,3);
32             if(s.find(t,i+3)!=i+3||val[i+5]){
33                 val[i]=true;
34                 ans.insert(t);
35             }
36         }
37 
38     }
39 cout<<ans.size()<<endl;
40 set<string>::iterator it;//set是自动去重并安字典序排序orz高大上,输出方式也高大上
41 for( it=ans.begin();it!=ans.end();it++)
42    cout<<it->c_str()<<endl;
43 
44     return 0;
45 }

 

posted @ 2016-05-29 20:57  十目  阅读(206)  评论(0编辑  收藏  举报