hdu 5776 sum 尺取法

来源:互联网 发布:淘宝晚装短款晚礼服 编辑:程序博客网 时间:2024/05/01 23:57

sum

   
 Accepts: 823
   
 Submissions: 1744
 Time Limit: 2000/1000 MS (Java/Others)
   
 Memory Limit: 131072/131072 K (Java/Others)
Problem Description

Given a sequence, you're asked whether there exists a consecutive subsequence whose sum is divisible by m. output YES, otherwise output NO

Input

The first line of the input has an integer T (1 \leq T \leq 101T10), which represents the number of test cases. For each test case, there are two lines: 1.The first line contains two positive integers n, m (1 \leq n \leq 1000001n1000001 \leq m \leq 50001m5000). 2.The second line contains n positive integers x (1 \leq x \leq 1001x100) according to the sequence.

Output

Output T lines, each line print a YES or NO.

Sample Input
23 31 2 35 76 6 6 6 6
Sample Output
YES

NO

题意:能不能找一个连续子区间的值等于m

代码:

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std;int a[100005];int main (){    int t,n,m;    scanf("%d",&t);    while(t--){        scanf("%d%d",&n,&m);        for(int i=1;i<=n;i++)            scanf("%d",&a[i]);        int r=1,sum=0,flag=0;        for(int i=1;i<=n;i++){            while(r<=n&&sum<m)                sum+=a[r++];            if(sum==m){                flag=1;                break;            }            sum-=a[i];        }        if(flag)            printf("YES\n");        else printf("NO\n");    }}

0 0