coder


私信TA

用户名:tomato

访问量:9457

签 名:

tomato

等  级
排  名 3345
经  验 1957
参赛次数 3
文章发表 10
年  龄 0
在职情况 学生
学  校 xynu
专  业 软件工程

  自我简介:

解题思路:

注意事项:

参考代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define ll long long
int N,K;
ll ans = 0;
int a[100000+5]; 
int S[100000+5]; //S[i]表示a[1]到a[i]的和
int cnt[100000+5]; //cnt[i]表示S模K为i的数的个数 
void solve()
{
	for(int i=1; i<=N; ++i)
	{
		S[i] = (S[i-1] + a[i])%K;
		ans += cnt[S[i]];
		cnt[S[i]]++;	
	} 
	cout<<ans+cnt[0]<<endl;
} 
int main()
{
	scanf("%d%d",&N,&K);
	memset(S,0,sizeof(S));
	memset(cnt,0,sizeof(cnt));
	int t = N;
	int i = 1; //从1开始 
	while(t--)
	{
		scanf("%d",&a[i]);
		i++;
	}
	solve();
	return 0;	
}


 

0.0分

6 人评分

  评论区

不太懂这个为什么最后是ans加上cnt的结果,大佬可以解释下吗?
2020-04-17 21:49:27
大神!
2020-03-21 13:08:21
  • «
  • 1
  • »