Cod sursa(job #2847437)
| Utilizator | Data | 10 februarie 2022 19:53:48 | |
|---|---|---|---|
| Problema | PScPld | Scor | 30 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.58 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream in("pscpld.in");
ofstream out("pscpld.out");
int mana[2*1000005];
int main()
{
string s;
char c;
s+='$';
while(in>>c)
{
s+=c;
s+='$';
}
int dr,mid;
dr=mid=-1;
int rez=s.size()/2;
for(int i=0;i<s.size();i++)
{
if(i<=dr)mana[i]=min(mana[2*mid-i],dr-i);
while(s[i+mana[i]+1]==s[i-mana[i]-1]&&i+mana[i]+1<s.size())mana[i]++;
if(i+mana[i]>dr)
{
mid=i;
dr=i+mana[i];
}
rez+=mana[i]/2;
}
out<<rez;
}
