Mai intai trebuie sa te autentifici.
Cod sursa(job #1155431)
Utilizator | Data | 26 martie 2014 21:46:10 | |
---|---|---|---|
Problema | Prefix | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.77 kb |
#include <fstream>
#include <string>
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
const int N = 1e6 + 5;
string s;
int n, U[N];
int main() {
fin >> n;
while (n--) {
int sol = 0;
string Input;
fin >> Input;
s = ' ' + Input;
int k = 0;
for (int i = 2; i < s.size(); ++i) {
while (k && s[k + 1] != s[i])
k = U[k];
if (s[k + 1] == s[i])
k++;
U[i] = k;
}
int i = s.size() - 1;
for (; i; --i)
if (U[i] && i % (i - U[i]) == 0) {
fout << i << "\n";
break;
}
if (!i)
fout << 0 << "\n";
}
}