题意略。
解析:把取模后的结果0...m-1看为盒子。
当n>m时,根据鸽巢原理,至少有一个盒子里有两个以上的球,结果必然是YES。
当n<=m是,扫一遍即可。
代码:
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;
int n,m,a,b[1005],c[1005];
int main(){
int i,j;
scanf("%d%d",&n,&m);
if(n > m){
puts("YES");
return 0;
}
while(n--){
scanf("%d",&a);
c[a%m]=b[a%m]+1;
for(i = 1;i < m;i++){
if(b[i])c[(i+a)%m]=b[(i+a)%m]+1;
}
memcpy(b,c,m*sizeof(int));
}
if(b[0]) puts("YES");
else puts("NO");
return 0;
}