Cod sursa(job #2387486)

Utilizator shantih1Alex S Hill shantih1 Data 24 martie 2019 19:04:20
Problema PScPld Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.53 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");

int n,i,j,c,r,l,nr,dp[1000005];
char s[2000015];
string t;
long long rez;

int main() {
	
	fin>>t;
	l=(int)t.size();
	s[n=1]='#';
	for(i=0;i<l;i++)
		s[++n]=t[i], s[++n]='#';

	rez=l;
	c=1;
	r=1;
	for(i=2;i<=n;i++)
	{
		if(r>i)	
			dp[i]=min(r-i, dp[2*c-i]);
		
		while(i+dp[i]<=n && i-dp[i]>0 && s[i+dp[i]]==s[i-dp[i]])
			dp[i]++;
		dp[i]--;
		
		if(i+dp[i]>r)	c=i, r=dp[i];
		
		rez+=1LL*dp[i]/2;
	}
	
	fout<<rez<<"\n";
}