Pagini recente » Cod sursa (job #852628) | Cod sursa (job #2192017) | Cod sursa (job #2728717) | Cod sursa (job #192174) | Cod sursa (job #1576796)
#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()
{
string maaruncinronisoara;
f>>maaruncinronisoara;
n=maaruncinronisoara.length();
for(i=0;i<n;i++)
{
s=s+maaruncinronisoara[i];
s=s+"1";
}
numar=n;
n=n*2-1;
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;
}