Pagini recente » Cod sursa (job #2019693) | Cod sursa (job #984331) | Monitorul de evaluare | Istoria paginii runda/as2/clasament | Cod sursa (job #1576766)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("pscpld.in");
ofstream g("pscpld.out");
string s;
char x;
int dre,stg,i,mij,n,d[2000003];
long long numar;
void pali1()
{
mij=i; stg=dre=i;
while(s[dre+1]==s[stg-1] and dre+1<n and stg-1>=0)
{dre++; stg--;}
d[i]=dre-mij;
}
void pali2()
{
d[i]=min(d[2*mij-i],dre-i);
if(d[i]==dre-i)
{
mij=i; stg=dre=i;
while(s[dre+1]==s[stg-1] and dre+1<n and stg-1>=0)
{dre++; stg--;}
d[i]=dre-mij;
}
}
int main()
{
while(f>>x)
{
s=s+x+"1";
}
n=s.length()-1;
numar=(n+1)/2;
dre=0; mij=0; d[0]=0; //g<<d[0]<<" ";
for(i=1;i<n;i++)
{if(dre<i) pali1();
else pali2();
numar+=(d[i]+i%2)/2; //g<<d[i]<<" ";
}
g<<numar;
return 0;
}