原题链接:https://ac.nowcoder.com/acm/contest/642/H
突破口:其实每一次能到达城市K的蚂蚁数是由a[i]当中最小的那个决定的。第一批蚂蚁a[min]只,到达K城市的时间为K-1,此后每过一秒就有a[min]只蚂蚁又到达城市K,故总时间为ans=k-1+[ (n-a[min])/a[min] ](向上取整)=k-2+[ n/a[min] ]。
代码如下:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
typedef long long ll;
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=1e5+5;
ll ants[maxn];
int main()
{
int T,k,i,j;
ll ans,mim,n; //n要long long型,就因为这个WA了好几遍唉ε=(´ο`*)))
cin>>T;
while(T--)
{
ans=mim=0;
cin>>n>>k;
for(i=2;i<=k;i++)
{
cin>>ants[i];
if(i==2)
mim=ants[i];
else if(ants[i]<mim)
mim=ants[i];
}
if(mim>=n)
{
cout<<k-1<<endl;
continue;
}
if(n%mim==0)
ans=n/mim+k-2;
else ans=n/mim+1+k-2;
cout<<ans<<endl;
}
return 0;
}