Cod sursa(job #1309020)
| Utilizator | Data | 5 ianuarie 2015 07:14:59 | |
|---|---|---|---|
| Problema | Prefix | Scor | 90 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.51 kb |
#include <fstream>
#include <string>
#include <vector>
int main(){
std::ifstream fin("prefix.in");
std::ofstream fout("prefix.out");
int T; fin>>T;
while(T--){
std::string s; fin>>s;
unsigned l=0;
std::vector<unsigned> prefix(s.size());
prefix[0]=0;
unsigned k=0;
for(unsigned i=1;i<s.size();++i){
while(k>0&&s[i]!=s[k]) k=prefix[k-1];
if(s[k]==s[i]) k++;
prefix[i]=k;
}
for(unsigned i=s.size()-1;i>0;--i)
if(prefix[i]&&(i+1)%(i+1-prefix[i])==0){ l=i+1; break;}
fout<<l<<'\n';
}
}
