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


翻译
爱丽丝,鲍勃和糖果
有 n 个糖果排成一排,编号从左到右是 1 到 n,糖果的大小是 a(i)。
两个人玩一个游戏,爱丽丝从左往右吃糖,鲍勃从右往左吃糖,当糖果吃没了游戏就结束了。
这是个回合制游戏,每个回合,玩家吃一个或者更多的糖果。
爱丽丝先吃,第一步吃一个糖果。接下来交换吃糖。
每一步,玩家吃糖的数量要大于等于上个玩家吃糖的总大小,并且一旦大于上个玩家的数量就立即停止。如果当前的糖不够这个数量,那么直接吃光。
输出游戏步数和两个数字 a 和 b:
- 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 长春
网友评论