Cod sursa(job #2977265)
Utilizator | Data | 11 februarie 2023 10:20:59 | |
---|---|---|---|
Problema | PScPld | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 0.75 kb |
#include <bits/stdc++.h>
using namespace std;
string s;
int ans[1000001], st, dr, mij, sum;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
int main()
{
fin >> s;
sum += s.size();
st = -1;
dr = -1;
for(int i = 1; i < s.size(); ++ i)
{
if(i >= dr)
{
st = i - 1;
dr = i + 1;
while(st >= 0 && dr < s.size() && s[st] == s[dr])
{
st --;
dr++;
ans[i] ++;
}
}
else
{
mij = (st + dr) / 2;
ans[i] = ans[i - mij];
}
}
for(int i = 0; i < s.size(); ++ i)
sum += ans[i];
fout << sum;
return 0;
}