Cod sursa(job #2387533)

Utilizator shantih1Alex S Hill shantih1 Data 24 martie 2019 20:18:59
Problema PScPld Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.75 kb
#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[0]='$';
	s[n=1]='#';
	for(i=0;i<l;i++)
	{
		s[++n]=t[i];
		s[++n]='#';
	}
	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";

	/*
	 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(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;
	 }*/
}