S组 T2
貌似没有人这么写,但是目前在所有的估分平台上都过了?
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e6 + 7;
int i, j, k, l, r, m, n, f[N], u[N];
ll c[N], ans;
char s[N];
int main()
{
scanf("%d%s", &n, s+1);
for (r=2; r<=n; r++)
{
i = r - 1;
while (f[i] && s[i] != s[r]) i = f[i];
if (s[i] == s[r]) c[r] = c[i-1] + 1, f[r] = i - 1;
}
for (i=1; i<=n; i++) ans += c[i];
printf("%lld", ans);
}