输入文件的第一行有一个正整数 T≤5T \leq 5T≤5,表示数据组数。 接下去有TTT组数据,每组数据的第一行有两个正整数nnn和aaa (1≤n≤20,1≤a≤1061 \leq n \leq 20, 1 \leq a \leq 10^{6}1≤n≤20,1≤a≤106). 第二行有nnn个正整数b1,…,bnb_1, \ldots, b_nb1,…,bn (∀1≤i≤n,1≤bi≤106\forall 1\leq i \leq n, 1 \leq b_i \leq 10^{6}∀1≤i≤n,1≤bi≤106).
输出描述
输出TTT行TTT个数表示每次询问的答案。
输入样例
2 2 9 2 7 2 9 6 7
输出样例
2 -1
第一场BC,哎,最后才输出数据,也是醉了
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
bool cmp(int x,int y)
{
return x>y;
}
int mark,k,a,op;
int vis[30];
int bj[30];
void mei(int n,int m)
{
if(n == op)
{
int s = a;
for(int j = 0; j < k; j++)
{
if(bj[j])
{
s%=vis[j];
}
}
if(s == 0)
{
mark = 1;
return ;
}
}
for(int i = m+1; i < k; i++)
{
bj[i] = 1;
mei(n+1,i);
if(mark)
return ;
bj[i] = 0;
}
}
int main()
{
int t;
scanf("%d",&t);
int io[5];
int y = 0;
while(t--)
{
int n,i,j;
scanf("%d%d",&n,&a);
memset(bj,0,sizeof(bj));
int ls[25];
k = 0;
for(i = 0; i < n; i++)
{
scanf("%d",&ls[i]);
if(a >= ls[i])
{
vis[k++] = ls[i];
}
}
sort(vis,vis+k,cmp);
mark = 0;
for(op = 1; op <= k; op++)
{
memset(bj,0,sizeof(bj));
mei(0,-1);
if(mark)
{
io[y++] = op;
break;
}
}
if(!mark)
io[y++] = -1;
}
for(int i = 0; i < y; i++)
printf("%d\n",io[i]);
return 0;
}