Cod sursa(job #2387443)

Utilizator shantih1Alex S Hill shantih1 Data 24 martie 2019 17:54:55
Problema PScPld Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.57 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;
			while(r+1<=n && s[r+1]==s[2*c-r-1])
				r++;
			dp[i]=r-c;
		}
	}
		
	long long rez=0;
	for(i=1;i<n;i++)
		rez+=1LL*(dp[i]+1)/2;
	fout<<rez<<"\n";
}