zoj 2042

来源:互联网 发布:2000年代流行网络歌曲 编辑:程序博客网 时间:2024/06/05 16:27

opt[i,j]表示前i个数%k是否可以得到余数为j的结果。

#include<cstdio>#include<string.h>#include<iostream>#include<cmath>#define clr(a) memset(a,0,sizeof(a))#define N 10001#define M 101using namespace std;int a[N];int b[N][M];int p,q;int n,m;int opt[N][M];int main(){int i,j,k,T,flag;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);for(i=1;i<=n;i++)scanf("%d",&a[i]);clr(b);clr(opt);p=1;b[0][0]=0;opt[0][0]=1;for(i=1;i<=n;i++){q=0;for(j=0;j<p;j++){k=abs(b[i-1][j]+a[i])%m;if(!opt[i][k]){opt[i][k]=1;b[i][q++]=k;}k=abs(b[i-1][j]-a[i])%m;if(!opt[i][k]){opt[i][k]=1;b[i][q++]=k;}}p=q;}if(opt[n][0])puts("Divisible");elseputs("Not divisible");if(T)puts("");}return 0;}