Cod sursa(job #1429703)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 6 mai 2015 22:54:33
Problema Prefix Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#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 ++;
        if(L != 0 && A[i] == A[i-L])
            maxim = i;
    } fout << maxim << "\n";
    return;
}

int main(){
    fin >> T;
    for(; T; T--){
        fin >> A + 1;
        N = length(A + 1);
        Prefix(A, N);
    }
    return 0;
}