一个小问题
查看原帖
一个小问题
895690
gghack_Nythix楼主2024/8/19 11:58

rt,赛时想到了思路,但是其实:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
int a[2000005],sum[2000005],cfg,t[2000005];
signed main(){
	int n,m;
	cin >> n >> m;
	for(int i = 1;i <= n;++i) cin >> a[i],a[i + n] = a[i];
	for(int i = 1;i <= n;++i) sum[i] = (sum[i - 1] + a[i]) % m,cfg+=t[sum[i]],++t[sum[i]];
	for(int i = n + 1;i <= n * 2;++i) {
		sum[i] = (sum[i - 1] + a[i]) % m;
		--t[sum[i - n]];//这个余数重复算(n=4,{1,5})
		cfg += t[sum[i]];
		++t[sum[i]];
	}
	return cout << cfg << '\n',0;
	return 0;
}
//统计在他之前有几个和他余数相同的

我的代码开始是这样的,后来删掉一点成了:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
int a[2000005],sum[2000005],cfg,t[2000005];
signed main(){
	int n,m;
	cin >> n >> m;
	for(int i = 1;i <= n;++i) cin >> a[i],a[i + n] = a[i];
	for(int i = 1;i <= n;++i) sum[i] = (sum[i - 1] + a[i]) % m,++t[sum[i]];//zheli
	for(int i = n + 1;i <= n * 2;++i) {
		sum[i] = (sum[i - 1] + a[i]) % m;
		--t[sum[i - n]];//这个余数重复算(n=4,{1,5})
		cfg += t[sum[i]];
		++t[sum[i]];
	}
	return cout << cfg << '\n',0;
	return 0;
}
//统计在他之前有几个和他余数相同的

请问为什么 [s,t],s∈[1,n],t∈[1,n][s,t],s\in[1,n],t\in[1,n] 不用单独算一遍啊。

2024/8/19 11:58
加载中...