Given a sequence, you're asked whether there exists a consecutive subsequence whose sum is divisible by m. output YES, otherwise output NOInput
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.
Output
Output T lines, each line print a `YES` or `NO`.
Simple Input
2 3 3 1 2 3 5 7 6 6 6 6 6
Simple Output
YES NO
Hint
CSU-ACM2017暑期集训热身训练1
原题链接:A-sum
思路:遍历加贪心,查找序列中是否存在一个子序列能被m整除。
但此方法的时间复杂度是O(n!),对于较长的序列可能会超时^_^
Ac代码
#include<iostream>
using namespace std;
#define maxn 100005
int x[maxn]={0};
int main()
{
ios::sync_with_stdio(false);
int t;
cin >> t;
while(t--)
{
int n, m, sum, flag=0;
cin >> n >> m;
for(int i=0; i<n; i++)
{
cin >> x[i];
if(x[i] % m ==0) flag=1;
}
if(flag==1) cout << "YES\n";
else{
for(int i=0; i<n; i++){
sum=0;
if(flag==1) break;
for(int j=i; j<n; j++)
{
sum+=x[j];
if(sum % m==0) {flag=1; break;}
}
}
if(flag==1) cout << "YES\n";
else cout << "NO\n";
}
}
return 0;
}