Cod sursa(job #2593960)
| Utilizator | Data | 5 aprilie 2020 00:22:11 | |
|---|---|---|---|
| Problema | PScPld | Scor | 60 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.63 kb |
#include <bits/stdc++.h>
#define Nmax 1000005
using namespace std;
ifstream fin ("pscpld.in");
ofstream fout ("pscpld.out");
char c;
string s;
int lg[Nmax], st, dr;
long long rez;
int main()
{
while(fin >> c)
{
s+='*';
s+=c;
}
s+='*';
for(int i=0;i<s.size();i++)
{
int k=1;
if(i<=dr)
k=min(dr-i+1, lg[st+dr-i]);
while(i+k<s.size() && i-k>=0 && s[i+k]==s[i-k]) k++;
lg[i]=k;
k--;
if(i+k>dr)
{
dr=i+k;
st=i-k;
}
rez+=lg[i]/2;
}
fout << rez;
return 0;
}
