sum
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 1126 Accepted Submission(s): 494
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), 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
Source
思路:当有两个前缀和相等,可以得到这段区间的和整除m;
余m==0特判;
#include<bits/stdc++.h> using namespace std; #define ll long long #define esp 0.00000000001 const int N=5e3+10,M=1e6+10,inf=1e9+10,mod=1000000007; int flag[N]; int main() { int x,y,z,i,t; int T; scanf("%d",&T); while(T--) { memset(flag,0,sizeof(flag)); scanf("%d%d",&x,&z); int ans=0,sum=0; for(i=0;i<x;i++) { scanf("%d",&y); sum+=y; sum%=z; if(flag[sum]) ans=1; flag[sum]=1; } if(ans||flag[0]) printf("YES "); else printf("NO "); } return 0; }