题目链接:hdu_5776_sum
题意:
给你一串数,问你是否有一个连续的子序列的和为m的倍数
题解:
维护一个前缀和%m的值,如果前缀和%m的值为0或者有两个前缀和%m的值相同,那么就有一个连续区间的和为m的倍数
#include<bits/stdc++.h>
#define F(i,a,b) for(int i=a;i<=b;i++)
using namespace std; const int N=1e5+;
int a[N],vis[],t,n,m,tp;
int main(){
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
memset(vis,,sizeof(vis));
int fg=;
F(i,,n){
scanf("%d",&tp);
a[i]=(a[i-]+tp)%m;
if(vis[a[i]])fg=;
else vis[a[i]]=;
if(a[i]==)fg=;
}
if(fg)puts("YES");else puts("NO");
}
return ;
}