Pagini recente » Cod sursa (job #2726199) | Cod sursa (job #2468461) | Cod sursa (job #524443) | Cod sursa (job #3269494) | Cod sursa (job #2192127)
#include <fstream>
#include <cstring>
#define Nmax 3000005
using namespace std;
ifstream f ("pscpld.in");
ofstream g ("pscpld.out");
int man[Nmax];
char a[Nmax], x;
long long ans, len;
void read()
{ a[0]='#';
while ( f >> x )
{
a[++len]=x;
a[++len]='#';
}
len--;
}
void manachers()
{
int mid=1,rgt=1;
man[1]=1;
for ( int i = 1 ; i <= len; i ++ )
{
man[i] = min(rgt-i, man[2*mid-i]);
while( a[i+man[i]] == a[i-man[i]] && (i-man[i]>=0) && (i+man[i]<=len ) )
man[i]++;
if ( man[i] + i > rgt )
{
mid=i;
rgt=man[i]+i;
}
}
}
void solve()
{
for ( int i = 1 ; i <= len ; i ++ )
{
man[i]--;
man[i]=man[i]/2;
if(i%2==1)
ans++;
ans+=1LL*man[i];
}
g << ans;
}
int main()
{
read();
manachers();
solve();
return 0;
}