本题的难点是可以在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; }