锦绣育才【集训题】吃巧克力

描述

小小李和小小铜喜欢玩游戏,他们准备开始一个新游戏。
他们在一条线上放置了 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

༺ཌༀ傲世万物ༀད༻

你的鼓励奖是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值