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≤T≤10
), 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≤n≤100000 , 1≤m≤5000 ).
2.The second line contains n positive integers x ( 1≤x≤100 ) according to the sequence.
For each test case, there are two lines:
1.The first line contains two positive integers n, m ( 1≤n≤100000 , 1≤m≤5000 ).
2.The second line contains n positive integers x ( 1≤x≤100 ) according to the sequence.
Output
Output T lines, each line print a YES or NO.
Sample Input
2 3 3 1 2 3 5 7 6 6 6 6 6
Sample Output
YES NO已知m1--mn n个数构造n个序列:S1=a1;S2=a1+a2;。。。。。。Sn=a1+a2+.....+an;则有两种可能:1.若有一个Si是m的倍数,则定理已经得证。2.上面序列中没有任何一个是m的倍数,则令Rh ≡ Sh % m;所有余数都小于m且不为0;则m个余数在[1,m-1]区间内至少有一对Rh==Rk;吗满足Sk ≡ Sh % m;设h>kSh-Sk=0 % m;#include<cstdio> #include<iostream> #include<cstring> using namespace std; int main(){ int a[100100],b[5555]; int T,n,x; scanf("%d",&T); while(T--){ int flag=0; scanf("%d%d",&n,&x); a[0]=0; memset(b,0,sizeof(b)); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); if(a[i]%x==0) flag=1; } for(int i=1;i<=n;i++){ (a[i]+=a[i-1])%=x; if(b[a[i]]) flag=1; else b[a[i]]=1; if(a[i]==0) flag=1; } if(flag) puts("YES"); else puts("NO"); } return 0; }