#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M = 100005;
int a[M];
int ans;
int main() {
int t;
cin >> t;
while (t--) {
int n, x;
cin >> n >> x;
ans = 0;
for (int i = 0; i < n; ++i)
scanf("%d", &a[i]);
sort(a, a + n);
int k = lower_bound(a, a + n, x) - a;
if (k == n) {
ans = x / a[n - 1] + (x % a[n - 1] == 0 ? 0 : 1);
} else if (a[k] == x) {
ans = 1;
} else {
ans = 2;
}
cout << ans << endl;
}
return 0;
}
题解:有三种情况,第一种是刚刚好一步能跳到目标点,此时ans=1;第二种情况是可选择的步数大于目标点距离,此时可至少两步到达;第三种情况就是可选择的步数都要比目标点距离短,这个时候用目标点距离除以最大的步数向上取整就可以。