hdu_5776_sum(前缀和维护)

题目链接: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 }

时间: 2024-12-18 21:18:35

hdu_5776_sum(前缀和维护)的相关文章

CH0805 前缀和维护奇偶 二分答案

题面 描述 lsp 学习数学竞赛的时候受尽了同仁们的鄙视,终于有一天......受尽屈辱的 lsp 黑化成为了黑暗英雄Lord lsp.就如同中二漫画的情节一样,Lord lsp 打算毁掉这个世界.数学竞赛界的精英 lqr 打算阻止Lord lsp 的阴谋,于是 她集合了一支由数学 竞赛选手组成的超级行动队.由于队员们个个都智商超群,很快,行动队便来到了 Lord lsp 的黑暗城堡的下方. 但是,同样强大的 Lord lsp 在城堡周围布置了一条"不可越过"的坚固防线.防线由很 多防

Jury Meeting CodeForces - 854D (前缀和维护)

Country of Metropolia is holding Olympiad of Metrpolises soon. It mean that all jury members of the olympiad should meet together in Metropolis (the capital of the country) for the problem preparation process. There are n + 1 cities consecutively num

hihocoder1496(高维前缀和)

题意:给定N个数A1, A2, A3, ... AN,小Ho想从中找到两个数Ai和Aj(i ≠ j)使得乘积Ai × Aj × (Ai AND Aj)最大.其中AND是按位与操作. 第一行一个整数N(1<=N<=100,000) 第二行N个整数A1, A2, A3, ... AN (0 <= Ai <2^20) 分析: 尝试枚举and值z,那么问题就变成了找寻最大的x*y,使得x&y==z 把这个要求放宽一点,我们来寻找z是x&y子集的情况(这样肯定不会丢掉整体最优

Hdu 4312-Meeting point-2 切比雪夫距离,曼哈顿距离,前缀和

题目: http://acm.hdu.edu.cn/showproblem.php?pid=4312 Meeting point-2 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1231    Accepted Submission(s): 691 Problem Description It has been ten years s

POJ - 3263 差分+前缀和

只需不断维护相对值的前缀就能得到解 这种思想第一次是在树状数组区间更新那里看到的,由于题目要求是1~n所以直接可以用前缀和维护 注意不能直接-1 +1 还有POJ的数据..要不是书里有提谁知道会这么毒瘤 /*H E A D*/ int delta[maxn]; map<P,int> vis; int main(){ int n,I,h,r,a,b; while(~iin(n)){ I=read();h=read();r=read(); memset(delta,0,sizeof delta);

bzoj 5092 分割序列 —— 高维前缀和

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5092 首先,处理出异或前缀和 s[i],i 位置的答案就是 s[j] + s[j]^s[i],j <= i 异或的套路是按位考虑,但是这里有加法...怎么考虑进位? 所以就不能考虑答案的这一位是什么,而应该考虑在这一位上的贡献,那么即使进位了,还是各位算各位的贡献,互相独立: 然后发现,如果 s[i] 在第 k 位上是1,那么 s[j] 的第 k 位无论是0还是1,总体的贡献都是 1<&

SDOI2010 粟粟的书架 lg2468(可持久化,前缀和)

题面见https://www.luogu.org/problemnew/show/P2468 然后这道题属于合二为一题,看一眼数据范围就能发现 首先我们先考虑50分,二维前缀和维护一下(反正我不记得公式,手推了半天) tot[i][j][k]表示矩阵(1,1)到(i,j)中数值大等于k的总和 num[i][j][k]表示矩阵(1,1)到(i,j)中数值大等于k的个数 那么做法也就显而易见了,二分k的值进行check 最后注意一个小问题,就是有可能一个k值有多个点,而我不需要全选就能满足条件,这个

浅谈简单前缀和与差分问题

\(Part1:\) 前缀和与差分的简单定义 考虑一个数组\(A\),其项数为\(n\)项.有\(m\)次询问,每次询问给定两个参数\(l\)和\(r\),要求求出\(A[l]+A[l+1]+...+A[r]\). 怎么做呢? 暴力:显然是\(O(nm)\)的 数据结构维护:显然是\(O(mlogn)\)的 前缀和的用处就在于可以将这样的序列区间求和的问题用\(O(n+m)\)的复杂度,在线性的时间和空间内解决出. 那么前缀和究竟是什么呢? 在读入\(A\)数组的时候,我们预处理出一个前缀和数组

BZOJ1224 [HNOI2002]彩票

首先发现暴搜是2^50级别,明显T了 我们搜索的时候,剪枝一下. 如果当前最大最小值都不满足满足题意的话就不搜了,我们可以用前缀和维护这个东西 于是就6s卡过 1 /************************************************************** 2     Problem: 1224 3     User: rausen 4     Language: C++ 5     Result: Accepted 6     Time:6800 ms 7