作者:44要和自己交个朋友 | 来源:互联网 | 2024-12-13 00:30
题目链接:Codeforces 1154D
题解:
本题的核心在于如何有效地利用可充电电池和普通电池以达到最远的行走距离。当没有阳光时,应优先考虑使用可充电电池,因为一旦可充电电池耗尽,再使用普通电池将无法继续前进。而当有阳光照射时,若可充电电池能够在当前步中至少充入一单位电量,则应该使用普通电池行走,以便让可充电电池有机会充电;反之,如果可充电电池不足以完成此步骤的充电,则直接使用可充电电池前进。
AC代码:
#include
using namespace std;
const int maxn = 2e5 + 5;
int n, a, b;
bool s[maxn];
int main() {
cin >> n >> a >> b;
for (int i = 1; i <= n; i++) {
cin >> s[i];
}
int cnt = 0, x = a, y = b;
for (int i = 1; i <= n; i++) {
if (!s[i]) { // no sun
if (y > 0) y--, cnt++;
else if (x > 0) x--, cnt++;
else break;
} else { // with sun
if (x 0) x++, y--, cnt++;
else if (y > 0) y--, cnt++;
else break;
}
}
cout < return 0;
}
以上代码首先读取输入数据,包括总步数、可充电电池和普通电池的初始电量。随后,遍历每一步,根据是否有阳光以及当前电池状态决定如何行动,最终输出最大可行步数。