Cod sursa(job #2387409)

Utilizator shantih1Alex S Hill shantih1 Data 24 martie 2019 17:11:16
Problema PScPld Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.58 kb
#include <iostream>
#include <fstream>

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

int n,i,j,c,r,dp[1000005];
string s;

void transform(string &s)
{
	string t=s;
	s=" #";
	for(i=0;i<t.size();i++)
		s=s+t[i]+"#";
}

int main() {
	
	fin>>s;
	transform(s);
	n=(int)s.size();
	
	c=1;	
	r=1;
	for(i=2;i<=n;i++)
	{
		while(c+dp[c]<=n && c-dp[c]>0 && s[c+dp[c]]==s[c-dp[c]])
			dp[c]++;
		
		r=c+dp[c]-1;
		j=c-(i-c);
		
		if(i<=r)	dp[i]=min(dp[j], r-i);
		if(i>r || r-i<=dp[j])	c=i, r=i;
	}
	
	long long rez=0;
	for(i=1;i<n;i++)
		rez+=1LL*dp[i]/2;
	fout<<rez<<"\n";
}