hdu_5776_sum(前缀和维护)

题目链接: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 ;
}
上一篇:HTML5数组方法


下一篇:nginx_tomcat负载均衡环境