题解

罗恩祥  •  3个月前


#include <bits/stdc++.h>
using namespace std;
long long lst[10016];
bool flag = 0;
long long N,K;
void dfs(long long idx,long long sum)
{
	if(sum % K == 0 && idx == N)
	{
		flag = 1;
		return;
	}
	else if(idx == N) //符号数量 = N - 1 
	{
		return;
	}
	else
	{
		dfs(idx + 1,sum + abs(lst[idx + 1]));
		dfs(idx + 1,sum - abs(lst[idx + 1]));
	}
}
int main()
{
	long long n;
	cin >> n;
	while(n--)
	{
		cin >> N >> K;
		for(int i = 1;i <= N;i++)
		{
			cin >> lst[i];
		}
		dfs(1,lst[1]);
		if(K == -1)
			cout << "Not divisible" << endl << endl;
		else if(flag)
			cout << "Divisible" << endl << endl;
		else
			cout << "Not divisible" << endl << endl;
		flag = 0;
	}
}
// lst = INF,1,1,INF,1,INF,INF,INF,INF,INF,INF

Comments: