Cod sursa(job #960990)

Utilizator Kira96Denis Mita Kira96 Data 11 iunie 2013 14:45:32
Problema PScPld Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<fstream>
#include<cstring>
#define NM 1000010
#define M 2000100
using namespace std;
ifstream f("pscpld.in");
ofstream g("pscpld.out");
char s[NM],v[M];
long long i,n,t,st,dr,S,ii,p,d[M];
int main()
{
	f>>(s+1);
	n=strlen(s+1);
	v[0]='!';
	for(i=1;i<=n;i++)
	{
		v[++t]=s[i];
		v[++t]=' ';
	}
	v[t]='#';
	for(i=1;i<t;++i)
	{
		if(i<dr)
		{
			ii=p-(i-p);
			if(d[ii]+i-1<dr)
			d[i]=d[ii];
			else
			{
				d[i]=dr-i+1;
				st=i-d[i]+1;
				st--;dr++;
				while(v[st]==v[dr])
					{ d[i]++; st--; dr++; }
				dr--;
				p=i;
			}
		}
		else
		{
			st=dr=i;
			while(v[st]==v[dr])
				{ d[i]++; st--; dr++; }
			dr--;
			p=i;
		}
	}
	for(i=1;i<t;i+=2)
		S+=(d[i]+1)/2;
	for(i=2;i<t;i+=2)
		S+=d[i]/2;
	g<<S;
	return 0;
}