也算是 一个前缀数组 吧
a[i] == 0 -> a[i] 及前面串的和 是 m 倍数
a[i] == a[j] -> a[i] 和 a[j] 之间串 是 m 倍数
#include <iostream>
#include<cstdio>
#include <cstring>
using namespace std;
const int maxn = 100000 + 10;
int a[maxn], T, n, m;
void init() {
scanf("%d%d", &n, &m);
int sum = 0, x;
for(int i = 1; i <= n; ++i) {
scanf("%d", &x);
sum += x;
a[i] = sum % m;
//cout << a[i] << endl;
}
}
void solve() {
for(int i = 1; i <= n; ++i) {
if(a[i] == 0) {
printf("YES\n");
return;
}
for(int j = i+1; j <= n; ++j) {
if(a[i] == a[j]) {
printf("YES\n");
return;
}
}
}
printf("NO\n");
return;
}
int main() {
scanf("%d", &T);
while(T--) {
init();
solve();
}
return 0;
}