初次使用同余 70 但问题出在哪儿? 求助谢谢
查看原帖
初次使用同余 70 但问题出在哪儿? 求助谢谢
663949
HYLW楼主2023/7/16 09:54
#include<iostream>         
using namespace std;

long long n,k;

long long a;
long long s[100000],v[1000000],cnt[1999999];         //s是前缀和,v是{0,1,3,6,10,15……},cnt是“余数桶”                            
long long ans=0;

int main(){
	scanf("%d %d",&n,&k);
	s[0]=0;v[1]=0;
	for(long long i=1;i<=n;i++){
		scanf("%d",&a);
		s[i]+=s[i-1]+a;                             //前缀和 
		v[i+1]+=v[i]+i;                             //组合情况的前缀和 
		cnt[s[i]%k]++;
	}
	for(int i=0;i<k;i++){
		ans+=v[cnt[i]];                             //同余情况加上 
	}
	ans+=cnt[0];                                    //整除的加上 
	printf("%d\n",ans);
	return 0;
}
2023/7/16 09:54
加载中...