HDOJ 5776 sum
来源:互联网 发布:淘宝活动大全2017 编辑:程序博客网 时间:2024/05/17 22:45
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5776
题意就是说在n个数中能不能找到一段连续的子串,使得其和为m的倍数。
我们采取的办法就是直接求出所有的前缀和对m取模的值,仔细思考如果两个位置的前缀和相等,那么一定这中间这段和就是m的倍数,举个例子,1~x1的和模m为2,1~x2的和模m也为2,那么一定会有x1~x2的和模m为0.
这里还要注意一个地方,也是很多人被hack的原因,那就是说如果出现的第一个数就是m的倍数,而后面都构不成m的倍数这种情况,那么我们刚刚的做法就会有一定的问题,所以特判一下这种情况就好。
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 100000+5;int a[maxn], vis[maxn], s[maxn];int main(){ int T; scanf("%d", &T); while(T--) { int n,m; scanf("%d%d", &n, &m); int ok = 0; s[0] = 0; for(int i=0; i<m; i++) vis[i] = 0; vis[0] = 1; for(int i=1; i<=n; i++) { scanf("%d", &a[i]); a[i] %= m; s[i] = (s[i-1]+a[i])%m; if(vis[s[i]]) ok = 1; vis[s[i]] = 1; } if(ok == 1) printf("YES\n"); else printf("NO\n"); }}
0 0
- HDOJ 5776 sum
- hdoj-【5776 Sum】
- HDOJ 5150 Sum Sum Sum Miller_Rabin
- HDOJ 1003 Max Sum
- HDOJ 1003 Max Sum
- hdoj 1003 Max Sum
- HDOJ 1003 Max Sum
- hdoj 1003Max Sum
- HDOJ 1003 Max Sum
- HDOJ 1003 Max Sum
- HDOJ--1003Max Sum
- hdoj 1003 Max Sum
- HDOJ 1001 Sum Problem
- HDOJ 1003 Max Sum
- HDOJ Sum Problem
- HDOJ 1003 Max Sum
- HDOJ 1003 Max Sum
- HDOJ 1003 Max Sum
- 实验二:CDP命令操作
- 深入理解ReentrantLock
- hdu5778
- PHPCMS 表单向导加入验证码
- RDP协议的框架
- HDOJ 5776 sum
- 网络工程1.4——OSI参考模型介绍
- hdu 3926 并查集
- 初识ReactJS的组件化开发(七):用表单做评论 (上):获取文本框的value
- iOS开发之直播App流程介绍,直播资料收集汇总,视频推流,视频拉流,SMTP、RTMP、HLS、 PLPlayerKit
- HDU 5776 (sum 前缀和)
- SDUT3343数据结构实验之二叉树四:还原二叉树
- VLAN原理详解
- Java单线程和多线程详解