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] 不用单独算一遍啊。