Codeforces - 577B dp
2015-09-15 18:14
417 查看
B. Modulo Sum
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
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.
Input
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).
Output
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.
Sample test(s)
input
output
input
output
input
output
input
output
Note
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.
题意:给你一个序列,询问是否存在一个子序列,其中子序列中各个元素能被m整除;
题解:当n > m ,每个元素对m取余,即有n个0~m-1的数,因为n>m,定能找到一个子序列满足条件;‘
若n <= m,即maxn <= 10^3 ;
设dp[i][j] 前i-1个数组成子序列的和被m取余的值为j,存不存在;
代码:
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
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.
Input
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).
Output
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.
Sample test(s)
input
3 5 1 2 3
output
YES
input
1 6 5
output
NO
input
4 6 3 1 1 3
output
YES
input
6 6 5 5 5 5 5 5
output
YES
Note
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.
题意:给你一个序列,询问是否存在一个子序列,其中子序列中各个元素能被m整除;
题解:当n > m ,每个元素对m取余,即有n个0~m-1的数,因为n>m,定能找到一个子序列满足条件;‘
若n <= m,即maxn <= 10^3 ;
设dp[i][j] 前i-1个数组成子序列的和被m取余的值为j,存不存在;
代码:
#include <stdio.h> #define ll __int64 const int maxn=1000010; const int maxm=1005; int n, m, i, j, a[maxn], dp[maxm][maxm]; int main() { scanf("%d%d", &n, &m); if(n > m) { printf("YES\n"); return 0; } for(i = 1;i <= n;i++) { scanf("%d", &a[i]); } for(i = 1;i <= n;i++) { dp[i+1][a[i]%m] = 1; for(j = 0;j < m;j++) { if(dp[i][j]) { dp[i+1][j] = 1; dp[i+1][(j+a[i])%m] = 1; } } } if(dp[n+1][0]) printf("YES\n"); else printf("NO\n"); }
相关文章推荐
- Linux命令
- 重写对象的equals方法和hascode方法
- shared_ptr 之循环引用 weak_ptr
- Swift 2:可以使用 @NSManage 标记自动生成方法
- 实现支付宝接口时url的构造,主要解决服务器不支持https的问题
- linux web篇---之二--mysql编译安装
- windows 下安装redis
- 懒人习惯之ButterKnife Zelezny
- <script>alert(123);<script>
- PHP Socket 编程过程详解
- Peak Finding
- 使用C++实现功能下载文件
- fish shell安装和配置
- .NET基础--do-while
- SQlite命令行操作数据库
- 二叉树面试题
- 学习之路之Fragment和Fragment之间的传值
- struts中的findForward()和getinputforward()
- nyoj 58 最少步数 【BFS】
- Yii 上传文件(头像)详解(三)