codeforces 577B Modulo Sum

B. Modulo Sum

 
 

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.

 

 1 #include<cstdio>
 2 #include<vector>
 3 #include<cmath>
 4 #include<queue>
 5 #include<map>
 6 #include<cstring>
 7 #include<algorithm>
 8 using namespace std;
 9 typedef long long ll;
10 typedef unsigned long long ull;
11 const int maxn=1e3+5;
12 bool vis[maxn],sum[maxn];
13 vector<int>sum_id;
14 int main()
15 {
16     int n,m;
17     scanf("%d%d",&n,&m);
18     if(n>m)
19     {
20         puts("YES");
21         return 0;
22     }
23     for(int i=0;i<n;i++)
24     {
25         int tt;
26         scanf("%d",&tt);
27         tt%=m;
28         if(!tt)
29         {
30             puts("YES");
31             return 0;
32         }
33         int num=sum_id.size();
34         for(int j=0;j<num;j++)
35         {
36             int newsum=(sum_id[j]+tt)%m;
37             if(newsum==0){puts("YES");return 0;};
38             if(!vis[newsum])vis[newsum]=1,sum_id.push_back(newsum);
39         }
40         if(!vis[tt])vis[tt]=1,sum_id.push_back(tt);
41     }
42     puts("NO");
43     return 0;
44 }

 

posted on 2015-11-27 17:37    阅读(221)  评论(0编辑  收藏  举报

导航