题目的意思是,给你一段序列,问你他的一段子序列能否被一个数整除。

我们可以来看一个序列:

a0,a1,a2......am......an......aq

我们假设从a0到am的和模x为1,如果a0到an的和模x也为1,那么从am+1到an的和就能被x整除了。


代码:

StatusAccepted
Time62ms
Memory2348kB
Length533
LangG++
#include <iostream>
#include <cstdio>
#include <memory.h>
using namespace std;
#define MAX 100010
int sub[MAX], flag[MAX];
int ans, t, n, m, sum;
int main()
{
    scanf("%d", &t);
    while(t--){
        memset(flag, 0, sizeof(flag));
        ans=0;
        sum=0;
        scanf("%d%d", &n, &m);
        for(int i=1;i<=n;i++){
            scanf("%d", &sub[i]);
            sum=(sum+sub[i])%m;
            if(flag[sum]||sum==0)ans=1;
            flag[sum]=1;
        }
        printf("%s\n", ans?"YES":"NO");
    }
    return 0;
}