求助
查看原帖
求助
561529
Infinite_Energy楼主2023/1/5 11:16

样例过了,提交10pts,哪位好心人帮帮忙啊

#include<bits/stdc++.h>
using namespace std;
long long t,n,k,a[1000010],now,last,tmp;
bool flag,f[2][110];
void dfs(long long now,long long sum){
	if(flag==1){
		return;
	}
	if(now>n){
//		cout<<sum<<endl;
		if(sum%k==0){
			flag=1;
		}
		return;
	}
	dfs(now+1,sum+a[now+1]);
	dfs(now+1,sum-a[now+1]);
}
long long read(){
	char ch=getchar();
	long long sgn=1,x=0;
	while(ch<'0'||ch>'9'){
		if(ch=='-'){
			sgn=-1;
		}
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=(x<<3)+(x<<1)+(ch&15);
		ch=getchar();
	}
	return x*sgn;
}
void write(long long n,bool p){
	if(n<0){
		putchar('-');
		n=-n;
	}
	if(n==0){
		if(p==true){
			putchar('0');
		}
		return;
	}
	write(n/10,0);
	putchar(n%10+'0');
}
int main(){
	t=read();
	while(t--){
		n=read();
		k=read();
		for(int i=1;i<=n;i++){
			a[i]=read();
		}
		memset(f,0,sizeof(f));
		f[0][0]=1;
		for(int i=1;i<=n;i++){
			if(i%2==0){
				now=0;
			}else{
				now=1;
			}
			if(now==0){
				last=1;
			}else{
				last=0;
			}
			for(int j=0;j<k;j++){
				f[now][j]=0;
			}
			for(int j=0;j<k;j++){
				if(f[last][j]==1){
					tmp=((j+a[i])%k+k)%k;
					f[now][tmp]=1;
					tmp=((j-a[i])%k+k)%k;
					f[now][tmp]=1;
				}
			}
		}
		if(f[n%2][0]==1){
			cout<<"Divisible"<<endl;
		}else{
			cout<<"Not Divisible"<<endl;
		}
	}
	return 0;
}


2023/1/5 11:16
加载中...