Codeforces 1352D - Alice, Bob an

2020-05-15  本文已影响0人  费城的二鹏

好吃的烤鱼,很喜欢的吃,还可以带朋友一起吃,不像 KFC 只能自己去。


翻译

爱丽丝,鲍勃和糖果

有 n 个糖果排成一排,编号从左到右是 1 到 n,糖果的大小是 a(i)。

两个人玩一个游戏,爱丽丝从左往右吃糖,鲍勃从右往左吃糖,当糖果吃没了游戏就结束了。

这是个回合制游戏,每个回合,玩家吃一个或者更多的糖果。

爱丽丝先吃,第一步吃一个糖果。接下来交换吃糖。

每一步,玩家吃糖的数量要大于等于上个玩家吃糖的总大小,并且一旦大于上个玩家的数量就立即停止。如果当前的糖不够这个数量,那么直接吃光。

输出游戏步数和两个数字 a 和 b:

输入格式

第一行输入 t,表示测试用例个数。

每个测试用例两行输入。第一行输入一个整数 n,表示糖果的数量,接下来一行输入 n 个整数,a(1),a(2),...,a(n)

可以保证所有 n 的总和不超过 2 * 10^5

输出格式

输出一行三个数字,用空格分隔。分别是游戏步数,a 和 b。

分析

感觉像是翻译题,只要翻译的准确应该就不会出错。

道模拟题,按照游戏规则,上来先吃一块糖,然后右边往左吃大于那个数量的糖,然后再是左往右依次循环。用 l 和 r 作为吃过的标记,当 l > r 时循环结束。

代码(PyPy3)

# https://codeforces.com/problemset/problem/1352/D

import sys

# sys.stdin = open(r"./file/input.txt", 'r')
# sys.stdout = open(r"./file/output.txt", 'w')

t = int(input())

for _ in range(t):
    n = int(input())
    arr = input().split(" ")
    arr = list(map(int, arr))
    # print(arr)

    step = 0
    l = 0
    r = n - 1
    last = 0
    lvalue = 0
    rvalue = 0
    while l <= r:
        temp = 0
        while temp <= last and l <= r:
            temp += arr[l]
            l += 1
        if temp > 0:
            step += 1
            last = temp
            lvalue += temp

        temp = 0
        while temp <= last and l <= r:
            temp += arr[r]
            r -= 1
        
        if temp > 0:
            step += 1
            last = temp
            rvalue += temp
    
    print(step, lvalue, rvalue)

更多代码尽在 https://github.com/Tconan99/Codeforces

by 费城的二鹏 2020.05.13 长春

上一篇 下一篇

猜你喜欢

热点阅读