码迷,mamicode.com
首页 > 其他好文 > 详细

hdu_5776_sum(前缀和维护)

时间:2016-07-31 00:13:32      阅读:299      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:hdu_5776_sum

题意:

给你一串数,问你是否有一个连续的子序列的和胃m的倍数

题解:

维护一个前缀和%m的值,如果前缀和%m的值为0或者有两个前缀和%m的值相同,那么就有一个连续区间的和为m的倍数

技术分享
 1 #include<bits/stdc++.h>
 2 #define F(i,a,b) for(int i=a;i<=b;i++)
 3 using namespace std;
 4 
 5 const int N=1e5+7;
 6 int a[N],vis[5555],t,n,m,tp;
 7 int main(){
 8     scanf("%d",&t);
 9     while(t--){
10         scanf("%d%d",&n,&m);
11         memset(vis,0,sizeof(vis));
12         int fg=0;
13         F(i,1,n){
14             scanf("%d",&tp);
15             a[i]=(a[i-1]+tp)%m;
16             if(vis[a[i]])fg=1;
17             else vis[a[i]]=1;
18             if(a[i]==0)fg=1;
19         }
20         if(fg)puts("YES");else puts("NO");
21     }
22     return 0;
23 }
View Code

 

hdu_5776_sum(前缀和维护)

标签:

原文地址:http://www.cnblogs.com/bin-gege/p/5722040.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!