思路:
头皮发麻的操作...
理解一下题意会发现:排名为\(i\)的前缀正好是第\(i\)个前缀。
所以问题就变成了求\(1->len\)的平方和,注意取模即可。
#include <bits/stdc++.h>
using namespace std;
int n;
const int mod = 1e9+7;
long long ans;
char s[1000010];
int main () {
freopen("absurdity.in","r",stdin);
freopen("absurdity.out","w",stdout);
cin >> n;
scanf("%s",s+1);
int len = strlen(s + 1);
for(int i = 1;i <= len; ++i) {
ans = ans + ((long long)i * i % mod);
ans %= mod;
}
printf("%lld\n",ans);
return 0;
}