本题的难点是可以在y轴正轴动,但也是突破点,知道x轴都是整数,那么对于任意长度来说,能到达的最短是1,最长是本身长度,那么我们就选择最长的距离,跳到一个点,使这个点为再跳就超过终点,那么就可以用2次跳跃到达终点,那么我们可以对终点距离/最大跳跃距离向上取整,与2的最大值为ans,除非一步可以到

#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) ((x)&(-x))
typedef long long LL;


void run_case() {
    LL n, x, tmp, Max=-1;
    bool flag = true;
    cin >> n >> x;
    for(int i = 0; i < n; ++i) {
        cin >> tmp;
        if(tmp == x) {
            flag = false;
        }
        Max = max(Max, tmp);
    }
    if(flag)
        cout << max((LL)ceil((double)x/Max), 2LL) << "\n";
    else cout << "1\n";
}

int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    //cout.setf(ios_base::showpoint);cout.precision(10);
    int t; cin >> t;
    while(t--)
    run_case();
    cout.flush();
    return 0;
}
View Code
02-14 03:41