Codeforces Round #319 (Div. 2) B. Modulo Sum
来源:互联网 发布:淘宝新店如何运营 编辑:程序博客网 时间:2024/06/05 05:30
借鉴自http://blog.csdn.net/u014492306/article/details/48369857
You are given a sequence of numbers a1, a2, ..., an, and a number m.
Check if it is possible to choose a non-empty subsequence aij such that the sum of numbers in this subsequence is divisible by m.
The first line contains two numbers, n and m (1 ≤ n ≤ 106, 2 ≤ m ≤ 103) — the size of the original sequence and the number such that sum should be divisible by it.
The second line contains n integers a1, a2, ..., an (0 ≤ ai ≤ 109).
In the single line print either "YES" (without the quotes) if there exists the sought subsequence, or "NO" (without the quotes), if such subsequence doesn't exist.
3 51 2 3
YES
1 65
NO
4 63 1 1 3
YES
6 65 5 5 5 5 5
YES
In the first sample test you can choose numbers 2 and 3, the sum of which is divisible by 5.
In the second sample test the single non-empty subsequence of numbers is a single number 5. Number 5 is not divisible by 6, that is, the sought subsequence doesn't exist.
In the third sample test you need to choose two numbers 3 on the ends.
In the fourth sample test you can take the whole subsequence.
借鉴了题解思路。
当n>=m时,抽屉原理即可知必定存在子列可整除m。
当n<m时,由于m范围较小,可直接计算n个数字所能产生的所有余数,最后检测0是否存在即可。代码中为了防止重复将本身计算,用了一些小技巧,值得学习
#include <algorithm>#include <iostream>#include <sstream>#include <cstring>#include <cstdlib>#include <string>#include <vector>#include <cstdio>#include <stack>#include <cmath>#include <queue>#include <map>#include <set>using namespace std;#define N 1000005#define INF 0x3f3f3f3f;int a[N],f[1005][2];int main() { int n,m; while (cin>>n>>m) { for (int i=0; i<n; i++) { scanf("%d",&a[i]); } memset(f, 0, sizeof(f)); if (n>=m) { cout<<"YES"<<endl; } else { int pr=0,nt=1; for (int i=0; i<n; i++) { nt^=1; pr^=1; f[a[i]%m][nt]=1; for (int j=0; j<m; j++) { if (f[j][pr]) { f[(j+a[i])%m][nt]=f[j][nt]=1; } } } if (f[0][nt]==1) { cout<<"YES"<<endl; } else cout<<"NO"<<endl; } } return 0;}
。
- Codeforces Round #319 (Div. 2) 577B Modulo Sum(dp)
- Codeforces Round #319 (Div. 2) B Modulo Sum (背包)
- Codeforces Round #319 (Div. 2) B. Modulo Sum
- Codeforces Round #319 (Div. 2) B Modulo Sum
- Codeforces Round #319 (Div. 2) B. Modulo Sum
- Codeforces Round #319 (Div. 2)B. Modulo Sum(数学,DP)
- Codeforces Round #319 (Div. 2)——B. Modulo Sum(01背包)
- Codeforces #319(Div.2) B. Modulo Sum (动态规划)
- CodeForce #319 div 2 B Modulo sum
- codeforces #319 DIV2 577B Modulo Sum
- codeforces 577B Modulo Sum
- codeforces 577B Modulo Sum
- Codeforces Round #336 (Div. 2)B. Hamming Distance Sum
- Codeforces Round #336 (Div. 2) B. Hamming Distance Sum
- Codeforces Round #336 (Div. 2) B. Hamming Distance Sum
- [CodeForces 577B]Modulo Sum[实现][数学]
- codeforces 377B Modulo Sum(数学,dp)
- codeforces 577B Modulo Sum(DP||set)
- 【uWSGI】 listen queue of socket (fd: 3) 错误分析
- 磁盘的分区扩容
- POJ3590,循环群构造(dfs做法)
- STL lower_bound与upper_bound
- Python sys模块常用方法 (六)
- Codeforces Round #319 (Div. 2) B. Modulo Sum
- 0917_SAD
- Missing Number
- getParameter和getAttribute的区别和各自的使用范围。
- Android Application解析
- android fix project properties是什么意思
- java.lang.StackOverflowError
- SQL Server中扫描(scan)和查找(seek)这两种算法的区别
- Yarn MapReduce内存分配