描述
小小李和小小铜喜欢玩游戏,他们准备开始一个新游戏。
他们在一条线上放置了 n 块巧克力。小小李从左到右开始吃巧克力,小小铜从右到左开始吃。
对于每块巧克力,玩家吃掉它所需的时间已知(小小李和小小铜以相同的速度吃)。
当玩家吃掉一块巧克力时,他立即开始吃下一块,但不允许同时吃两块巧克力,且不允许留下未吃完的巧克力。如果两名玩家同时开始吃同一块巧克力,小小铜会把它让给小小李。
请问,小小李和小小铜将各自吃掉多少块巧克力?
输入描述
第一行包含一个整数 n(1 ≤ n ≤ 105)— 桌子上巧克力的数量
第二行包含一个序列 ti(1 ≤ ti ≤ 1000),代表吃掉第 i 块巧克力所需的时间(以秒为单位)(按从左到右的顺序)
输出描述
输出两个数字 a 和 b,其中 a 是小小李吃掉的巧克力数量,b 是小小铜吃掉的巧克力数量
用例输入 1
5
2 9 8 2 7
用例输出 1
2 3
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
// 存储每块巧克力的食用时间
vector<int> times(n);
for (int i = 0; i < n; ++i) {
cin >> times[i];
}
// 小小李从左开始,小小铜从右开始
int left = 0, right = n - 1;
// 小小李和小小铜已用的时间
int timeLi = 0, timeTong = 0;
while (left <= right) {
if (timeLi + times[left] <= timeTong + times[right]) {
// 小小李吃的时间更短或者相等,小小李吃这块巧克力
timeLi += times[left];
left++;
} else {
// 小小铜吃这块巧克力
timeTong += times[right];
right--;
}
}
// 小小李吃掉的巧克力数量
int a = left;
// 小小铜吃掉的巧克力数量
int b = n - left;
cout << a << " " << b << endl;
return 0;
}