codeforces 577B Modulo Sum
2015-09-11 15:10
295 查看
问能不能在大小是n的数列中取出几个数,使得他们的和是m的倍数
如果n>m,那么无论n个数是多少,都可以,这是一个定理
所以我们要讨论的就是n<=m的时候
对于1 2 2 3这个数列
我们能得到的和有1 2 3 4 5 6
重复的就直接去掉
所以用set容器来保存前i个数能得到的和
如果n>m,那么无论n个数是多少,都可以,这是一个定理
所以我们要讨论的就是n<=m的时候
对于1 2 2 3这个数列
我们能得到的和有1 2 3 4 5 6
重复的就直接去掉
所以用set容器来保存前i个数能得到的和
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <string> #include <queue> #include <vector> #include <set> #include <functional> using namespace std; int a[1000005]; int sum[1005]; int main() { int n,m; scanf("%d%d",&n,&m); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } if(n>m) { printf("YES\n"); return 0; } set<int>s; set<int>::iterator it; s.insert(a[0]%m); for(int i=1;i<n;i++) { int l=-1; it=s.begin(); int si=*it; if(si==0) { printf("YES\n"); return 0; } for(it=s.begin();it!=s.end();++it) { l++; int si=*it; sum[l] = (si+a[i])%m; } for(int j=0;j<=l;j++) s.insert(sum[j]); s.insert(a[i]); } it=s.begin(); int si=*it; if(si==0) { printf("YES\n"); return 0; } printf("NO\n"); return 0; }
相关文章推荐
- UGUI 按钮的监听事件系统
- STL之set集合容器
- svn常见错误汇总
- .NET项目笔记——使用NPOI读取Excel导入数据和导出Excel的功能
- 《零基础学python》(第二版)
- Android Camera(一)
- (4.3.1.12)Fragment中使用ViewPager时,ViewPager里的Fragment错位和空白问题。
- 关于手机联系人的中文字母排序问题
- 手机 同步失败,失败原因:failed to copy
- hdoj 1541 Stars【线段树单点更新+最大值维护】
- opendaylight 源码编译
- qml学习--------------鼠标事件响应
- Filter总结
- JQuery的Ajax跨域请求的解决方案
- javascript函数定义
- 关于char * ,const char* 转 LPCWSTR 无效的方法
- 【敏捷软件开发:原则、模式与实践】之敏捷设计的几个原则
- iOS开发之 通知
- 批量制作图种
- UITableViewCell的4种显示格式