博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

[JZOJ 5860] 荒诞

思路:
头皮发麻的操作...

理解一下题意会发现:排名为\(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;
}

posted @ 2018-09-10 11:40  Allorkiya  阅读(137)  评论(0编辑  收藏  举报