Cod sursa(job #2679623)

Utilizator BogdanTicuTicu Bogdan Valeriu BogdanTicu Data 1 decembrie 2020 01:57:25
Problema PScPld Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.55 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("pscpld.in");
ofstream out("pscpld.out");

string s,aux;
long long ans=0;
int z[2000005]; //2*1000000
int main()
{
	in>>aux;
	for(int i=0;i<aux.size();i++)
	{
		s+="#";
		s+=aux[i];
		ans++;
	}
	s+="#";
	int C=0,R=0;
	for(int i=1;i<s.length();i++)
	{
		int aux=2*C-i;
		if(i>R || z[aux]>=R-i)
		{
			if(i>R)
				R=i;
			int k=R;
			while(k<s.length() && s[k]==s[2*i-k])
				k++;
			k--;
			z[i]=k-i;
			if(k>C)
			{
				C=i;
				R=k;
			}
		}
		else
			z[i]=z[aux];
		ans+=z[i]/2;
	}
	out<<ans;
	return 0;
}