/*
题目还是用到了鸽笼原理,
举例:
2 1 2 1 1 2 1 2
余数:2 3 1 2 3 1 2 0
所以对余数为2的来说1+2=3(从第二个开始计数)
对余数为3的来说1
对余数为1的来说1
对余数为0的来说1(0从第一个开始计数)
*/
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int d,n;
long long a[55000];
long long yu[1000005];
int main()
{
int T;
int i;
scanf("%d",&T);
long long sum;
long long ans;
while(T--)
{
memset(yu,0,sizeof(yu));
scanf("%d%d",&d,&n);
for(i=0;i<n;i++)
{
scanf("%lld",&a[i]);
}
sum=0;
ans=0;
for(i=0;i<n;i++)
{
sum=sum+a[i];
if(sum%d==0)
yu[0]++;
ans+=yu[sum%d];
if(sum%d!=0)
yu[sum%d]++;
}
cout<<ans<<endl;
}
return 0;
}
poj 3844 (鸽笼原理)
最新推荐文章于 2021-02-28 06:18:43 发布