题意:
给出n个数,再给一个a;
求a mod n个数中等于0时,可以使用的最少的数,不能==0则输出-1.
题解:
如果x<y;
则 x%y==x;
无意义,
所以要把所有的数降序排序,然后枚举。从大向小依次取mod。
用bfs 第一次找到的就是最少步数。
用dfs 也能过,但是有人说T了, 但是还是有好多人也过了。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=20+10;
int num[maxn];
struct node{
int cnt,mod;
}e,v;
int cmp(int a,int b){
return a>b;
}
int main(){
int T,n,x;
scanf("%d",&T);
queue<node>que;
while(T--){
scanf("%d%d",&n,&x);
for(int i=0;i<n;i++)
scanf("%d",&num[i]);
sort(num,num+n,cmp);
while(!que.empty()) que.pop();
e.cnt=0,e.mod=x;
que.push(e);int ans=0;
while(!que.empty()){
v=que.front();
que.pop();
for(int i=0;i<n;i++){
if(v.mod==num[i]){
ans=v.cnt+1;
break;
}
if(v.mod>num[i]){
e.cnt=v.cnt+1;
e.mod=v.mod%num[i];
que.push(e);
}
}
if(ans) break;
}
if(ans) printf("%d\n",ans);
else printf("-1\n");
}
return 0;
}