2024牛客暑假多校训练营3 - A. Bridging the Gap 2

思路全在注释里了:

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;

const int N=5e5+5;
int n,l,r,a[N];

bool Solve()
{
	//打工次数:一个人能将其他人运过去的次数=一个人能过去以后能往返的次数 
	scanf("%d%d%d",&n,&l,&r);
	int min_go=ceil(1.0*(n-r)/(r-l)); //最小来回总次数 
	//每一趟最多运(r-l)个人;最后一趟只用过去r个人,不用回来 
	int go_work=0;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		go_work+=min(a[i]-1>>1,min_go); //一个人能打工的最大次数(-1是因为自己坐船过去需要1的体力) 
		//每个人每趟只能打工一次,一共最多也只能打工最小来回总次数次,多了的没用 
	}
	return go_work>=min_go*l;
	//所有人能打工的总次数>=最小来回总次数×每次需要打工的人的数量(=一共需要打工的次数) 
}

int main()
{
	printf("%s\n",Solve()?"Yes":"No");
	return 0;
}
posted @ 2024-10-10 19:54  Jerrycyx  阅读(19)  评论(0)    收藏  举报