Cod sursa(job #1309019)
| Utilizator | Data | 5 ianuarie 2015 07:10:08 | |
|---|---|---|---|
| Problema | Prefix | Scor | 80 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.45 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;
if(k>0 && (i+1)%(i+1-k)==0) l=i+1;
}
fout<<l<<'\n';
}
}
