Pagini recente » Cod sursa (job #3153960) | Cod sursa (job #812947) | Cod sursa (job #2686178) | Cod sursa (job #1429830) | Cod sursa (job #1429712)
#include <fstream>
#include <cstring>
#define DIM 1048576
using namespace std;
ifstream fin ("prefix.in" );
ofstream fout("prefix.out");
int N, P[DIM], T; char A[DIM];
inline int length(char A[]){
int st = 1, dr = DIM;
while(st <= dr){
int mid = st + (dr - st) / 2;
if(A[mid] != 0) st = mid + 1;
if(A[mid] == 0) dr = mid - 1;
}
return dr;
}
inline void Prefix(char A[], int N){
int maxim = 0, i, L = 0;
for(i = 2; i <= N; i ++){
while(L != 0 && A[i] != A[L+1])
L = P[L];
if(A[i] == A[L+1])
L ++;
P[i] = L;
if(P[i] > 0 && i % (i - P[i]) == 0)
maxim = i;
} fout << maxim << "\n";
return;
}
int main(){
fin >> T;
for(; T; T--){
fin >> A + 1;
N = strlen(A + 1);
Prefix(A, N);
}
return 0;
}