題目鏈接:
Codeforces Round #621 B. Cow and Friend
題目解析:
假設當前最大跳躍距離爲X,則當兩點之間直線距離小於等於2X時,一定可以通過兩次跳躍到達。
如圖,從0跳到10,X=5 。 距離剛好等於2X,相切(正好能兩次跳到)。若X>5,兩圓相交,可兩次跳到;若X<5,相離,不能兩次跳到。
因此,我們只需要記錄最遠可跳躍距離,計算通過幾次跳躍可到達即可
特殊情況:
距離dis小於最遠可跳躍距離時,如果有某個可跳躍距離正好等於dis,則一次跳躍可直接到達;否則需要兩次
AC代碼:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define ll long long
using namespace std;
int t,n,x,a;
int main()
{
cin>>t;
while(t--)
{
cin>>n>>x;
int maxx=0,flag=0;
for(int i=1;i<=n;i++)
{
cin>>a;
if(a==x) flag=1;
maxx=max(maxx,a);
}
if(flag) {cout<<1<<endl;continue;}
if(x<maxx) {cout<<2<<endl;continue;}
if(x%maxx==0) cout<<x/maxx<<endl;
else cout<<x/maxx+1<<endl;
}
}