Cod sursa(job #1677133)

Utilizator pas.andreiPopovici Andrei-Sorin pas.andrei Data 6 aprilie 2016 12:55:02
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <functional>
#include <string>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#define NMAX 1000005
#define MOD 666013
#define INF 0x3f3f3f3f
#define pb push_back

using namespace std;

typedef pair<int, int> pii;

ifstream fin("prefix.in");
ofstream fout("prefix.out");

char a[NMAX];
int pref[NMAX], n;

inline void prefix() {
	int i,j=0;

	for(i=2;i<=n;++i) {
		while(j>0 && a[j+1] != a[i])
			j=pref[j];

		if(a[j+1]==a[i]) ++j;

		pref[i]=j;
	}
}

int main() {
	int i,lgpref,t;

	fin>>t;
	while(t--) {
		fin>>(a+1);
		n=strlen(a+1);

		prefix();

		i=n;
		lgpref=0;
		while(i) {
			if(pref[i] != 0 && pref[i]%(i-pref[i]) == 0) {
				lgpref=i;
				break;
			}
			--i;
		}

		fout<<lgpref<<'\n';
	}

    return 0;
}