Cod sursa(job #2754829)

Utilizator Mirc100Mircea Octavian Mirc100 Data 26 mai 2021 16:20:41
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<fstream>
#include<iostream>
#include<cstring>
#define N 1000001
using namespace std;
char s[N];
int pi[N];
using namespace std;
int* prefix(char *p ){
	int i,n;
	n=strlen(p);
	int q=0;
	pi[0]=0; //trebuie separat
	for(i=1;i<n;i++){
		//q=pi[i-1];
		while(q>0 && p[i]!=p[q]){
			q=pi[q-1];
 
		}
	 
		if(p[i]==p[q])  
			q++;
		pi[i]=q;
	}
 
	return pi;
}
int prefix_periodic(char s[]){
	prefix(s);
	int n=strlen(s);
	while(n>=1){
		if(pi[n-1]!=0){
			int t= n-pi[n-1];
			if (n%t==0)
				return n;
			
		}
		n--;
	}
	return 0;
}
int main(){
	 
	ifstream f("prefix.in");
	ofstream g("prefix.out");
	f.getline(s,N);
	while(f.getline(s,N)){
		int x=prefix_periodic(s);
		if(x!=-1)
			g<<x<<endl;
		else
			g<<-1<<endl;	
			
	}
	g.close();
	
}