Pagini recente » Cod sursa (job #3152126) | Cod sursa (job #1506447) | Cod sursa (job #355381) | Cod sursa (job #2797575) | Cod sursa (job #568542)
Cod sursa(job #568542)
#include<fstream>
#include<vector>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
string A;
int t;
void Read();
void Prefix();
int main()
{
Read();
string a = "mama";
fin.close();
fout.close();
return 0;
}
void Read()
{
fin >> t;
for( int i = 1; i <= t; ++i )
{
fin >> A;
Prefix();
}
}
void Prefix()
{
vector<int> T(A.size()+ 1, -1);
int lungime = 0;
int l;
int ok = 0;
for( int i = 1; i <= A.size(); ++i )
{
int pos = T[i-1];
while( pos != -1 && A[i-1] != A[pos] )
pos = T[pos];
T[i] = pos + 1;
if( ok == 0 && T[i] == 2 )
{
ok = 1;
l = i - 2;
lungime = l;
}
if( ok == 1 && (T[i] % l) == 0 && (i % l) == 0 && T[i] > T[i-1])
lungime = lungime + l;
}
//for( int i = 1; i <= A.size(); ++i )
// fout << T[i] << ' ';
fout << lungime << '\n';
}