GYM-A. Golden Spirit等

1、题目链接:Problem - A - Codeforces

题意:桥两边有2 * n个不能独立过桥的老人,老人想到对面休息 re 分钟后返回原位置,每次过桥需要花费 cr 分钟,问最少需要多长时间,可以帮助所有老人过桥。

思路:首先,是把所有老人从一边先都扶到另一边, 需要时间 2 * cr * n 。然后我们需要考虑,到对面扶一号老人所花费的总时间小还是扶此刻所在位置的2号老人划算。

如果此刻(2 * (n - 1) * cr) >= re, 那么我们就可以直接扶走二号老人;如果不满足这种情况,接下来等待二号老人所需要的时间和到对面扶一号老人的时间的大小。那么如果需要到对面,那么需要对过桥时间和等待一号老人时间取一个更大值。

#include<bits/stdc++.h>
#define ll long long
using namespace std;

ll n, re, cr, s;
int t;

int main(){
cin
>> t;
while( t -- ){
cin
>> n >> re >> cr;
if( (2 * n - 2 ) * cr >= re) // 判断直接可以扶走二号老人
s
= cr * n * 4;
else
s
= 2 * n * cr + min(2 * cr + re, max( cr + 2 * n * cr, re + cr));
cout
<< s << endl;
}
return 0;
}

 

posted @ 2021-11-06 11:58  风归去  阅读(34)  评论(0编辑  收藏  举报