• 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 }
  • 相关阅读:
    hdu 4801模拟题
    ASP.NET程序中动态修改web.config中的设置项目(后台CS代码)
    缓存依赖语句
    ajax post提交数据, input type=submit 返回prompt aborted by user
    JQuery Ajax调用asp.net后台方法
    ASP.NET Cache
    c#字符串及数组操作
    C#字符串与char数组互转!
    c# equals与==的区别
    如何将DataTable转换成List<T>呢?
  • 原文地址:https://www.cnblogs.com/homura/p/5001355.html
Copyright © 2020-2023  润新知