码迷,mamicode.com
首页 > 其他好文 > 详细

sum (bestcoder)

时间:2016-07-31 15:39:21      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

sum

Accepts: 640
Submissions: 1744
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 131072/131072 K (Java/Others)
问题描述
给定一个数列,求是否存在连续子列和为m的倍数,存在输出YES,否则输出NO
输入描述
输入文件的第一行有一个正整数T(1≤T≤101\leq T \leq 101T10),表示数据组数。

接下去有T组数据,每组数据的第一行有两个正整数n,m (1≤n≤100000 1\leq n\leq 1000001n100000 ,1≤m≤5000 1\leq m\leq5000 1m5000).

第二行有n个正整数x (1≤x≤1001\leq x\leq 1001x100)表示这个数列。
输出描述
输出T行,每行一个YES或NO。
输入样例
2
3 3
1 2 3
5 7
6 6 6 6 6
输出样例
YES
NO
【分析】不知道为什么这么做可以,可能是结论吧,这是别人的AC代码。
技术分享
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <time.h>
#include <string>
#include <map>
#include <stack>
#include <vector>
#include <set>
#include <queue>
#define inf 0x3f3f3f3f
#define mod 1000000007
typedef long long ll;
using namespace std;
const int N=5000+5;
bool flag[N];
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n,m;
        scanf("%d%d",&n,&m);
        memset(flag,0,sizeof(flag));
        flag[0]=1;
        int s=0,x;
        bool ans=0;
        for(int i=1;i<=n;++i){
            scanf("%d",&x);
            s=(s+x)%m;
            if(flag[s])ans=1;
            flag[s]=1;
        }
        if(ans)puts("YES");
        else puts("NO");
    }
}
View Code

 

sum (bestcoder)

标签:

原文地址:http://www.cnblogs.com/jianrenfang/p/5723030.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!