hdu 5776 鸽巢定理的应用

来源:互联网 发布:招聘程序员的公司 编辑:程序博客网 时间:2024/05/29 16:13

相关知识链接

http://blog.csdn.net/pi9nc/article/details/8506306

题目链接

http://acm.hdu.edu.cn/showproblem.php?pid=5776

解析


预处理前缀和,一旦有两个数模m的值相同,说明中间一部分连续子列可以组成m的倍数。


代码

#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#include <map>using namespace std;const int maxn = 100000+10;int num;int vis[maxn];typedef long long LL;int a[maxn];int main(){    int T;    scanf("%d", &T);    while (T--) {        int n, m;        memset(vis, 0, sizeof(vis));        vis[0] = 1;        scanf("%d%d", &n, &m);        int sum = 0;        for (int i=0; i<n; i++)            scanf("%d", &a[i]);        int flag=0;        for (int i=0; i<n; i++){            sum = (sum+a[i])%m;            if (vis[sum]) {                flag = 1;                break;            }            vis[sum]++;        }        if (flag == 1)            puts("YES");        else            puts("NO");    }    return 0;}
0 0
原创粉丝点击