Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- ifstream fin("kps.in");
- ofstream fout("kps.out");
- int C;
- string s;
- vector<vector<string>> v(10002);
- int longestPrefixSuffix(string s)
- {
- int n = s.length();
- int lps[n];
- lps[0] = 0;
- int len = 0;
- int i = 1;
- while (i < n)
- {
- if (s[i] == s[len])
- {
- len++;
- lps[i] = len;
- i++;
- }
- else
- {
- if (len != 0)
- len = lps[len-1];
- else
- {
- lps[i] = 0;
- i++;
- }
- }
- }
- int res = lps[n-1];
- return res;
- }
- int main()
- {
- fin>>C;
- if(C==1)
- {
- fin>>s;
- fout<<longestPrefixSuffix(s);
- }
- else
- {
- int maxs=0;
- while(fin>>s)
- {
- int k=longestPrefixSuffix(s);
- maxs=max(k, maxs);
- v[k].push_back(s);
- }
- int k=maxs;
- for(int i=0;i<=k;++i)
- sort(v[i].begin(),v[i].end());
- for(int i=0;i<=k;++i)
- {
- fout<<v[i].size()<<' ';
- for(int j=0;j<(int)v[i].size(); ++j)
- fout<<v[i][j]<<' ';
- fout<<'\n';
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement