Cod sursa(job #2387453)

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

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

int n,i,j,c,r,l,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()-1;
	
	c=1;
	r=1;
	for(i=2;i<=n;i++)
	{
		j=c-(i-c);
		if(i<=r)	dp[i]=min(dp[j], r-i);
		
		if(i>=r || r-i<=dp[j])
		{
			c=i;
			r=max(r,i);
			while(2*c-r-1>0 && r<n && s[r+1]==s[2*c-r-1])
				r++;
			dp[i]=r-c;
		}
	}
	/*
	for(i=1;i<=n;i++)
		cout<<s[i]<<" ";	cout<<"\n";
	for(j=1;j<=n;j++)
		cout<<dp[j]<<" ";	cout<<"\n";
	*/
	long long rez=0;
	for(i=1;i<=n;i++)
		rez+=1LL*(dp[i]+1)/2;
	fout<<rez<<"\n";
}