来源:牛客网
一组nnn步行者在晚上到达河岸。他们想乘船过河,这艘船最初是在他们这边。这艘船最多可以容纳RRR一次步行者,至少需要LLL (1≤L<R)(1 \leq L < R)(1≤L<R)助行器操作。
划船是一项累人的任务。每次用船将一群步行者运送到河的另一边时,船上的所有步行者的耐力必须大于000,每个步行者的耐力都会减少111旅行结束后。最初,我我我-沃克(1≤我≤n)(1 \leq i \leq n)(1≤我≤n)体力值h我h_ih我.
您需要确定是否可以使用船将所有步行者运送到河的另一边。
我们需要判断最基本的过河条件 也就是坐船长的基本次数,所以我们求过河的总次数与基本次数对比,最后进行判断能否过河
下面代码中的ans 趟数的最小值 但是为什么不是ans*L 取最小值呢 因为开船需要最低的人数L (你次数够了但是,一个人开不了船)
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int n,l,r;
cin>>n>>l>>r;
int ans=(n-l-1)/(r-l);//求最低的人数
int sum=0;
for(int i=0;i<n;i++){
int x;cin>>x;
sum+=min(ans,(x-1)/2);//每个人可以当船长的次数
}
if(sum>=ans*l){//判断够不够最基本的过河次数
cout<<"YES"<<endl;
}else cout<<"NO"<<endl;
return 0;
}