#WC024. 博弈大师
博弈大师
题面描述
这是一道交互题。
灰和青正在玩一个取数游戏。
给定一个参数 和一个长度为 的非负整数序列 (从左到右排成一行)。
两名玩家轮流行动,灰先手。每一次行动,当前玩家必须从序列的最左端或最右端选择一个数字并删去,将该数字的值累加到自己的得分中。直到所有数字都被取完,游戏结束,得分更高的玩家获胜。保证 是奇数,因此不存在平局。
在本题中,你需要在灰和青中选择一方扮演,与交互库扮演的另一方对战,并通过合理的策略战胜对手。
输入
输入的第一行包含一个整数 。
第二行包含 个整数 ,表示序列中的数字。
交互协议
在读入 和序列 之后,交互正式开始。你的程序需要与交互器按如下协议进行操作:
-
选择角色
首先,你需要输出一行,只包含一个字符串:
Ash:表示你选择扮演灰,即先手;Cyan:表示你选择扮演青,即后手。
输出该行后,需要换行并刷新输出缓冲区。
-
游戏过程
之后总共会进行恰好 次取数操作。设当前剩余的序列为 (初始时 ),左端为 ,右端为 。
-
如果轮到 你 行动: 你应当输出一行,只包含一个字符:
L:取走当前最左端的数字 ;R:取走当前最右端的数字 。
输出该行后,同样需要换行并刷新输出缓冲区。
-
如果轮到 对手(交互库) 行动: 你应当从标准输入中读入一行,只包含一个字符:
L:表示对手取走当前最左端的数字;R:表示对手取走当前最右端的数字。
灰先手、之后双方轮流,直到所有 个数字均被取完。 每个数字恰好被取一次,因此你总共会输出 次字符,并读入 次对手的字符。
-
-
结束与判定
当序列为空时,游戏结束:
- 如果你选择的角色的得分大于对手的得分,则你的程序在该测试点上被判为 Accepted;
- 否则(你输掉游戏或得分相等),你将收到 Wrong Answer 判定。
当游戏结束后,你的程序必须立即终止,不能再进行任何读写操作。
-
非法操作
- 如果你在不该输出的时候输出了内容;
- 或者输出了除
Ash,"Cyan",L,R以外的字符串或字符; - 或者输出的格式不符合要求(多余内容、缺少换行等);
则交互器可以立即终止交互并给出 Wrong Answer 或其他任意判定。
交互细节
在每次输出后,不要忘记刷新输出缓冲区。你可以使用下述方法之一:
- 在 C/C++ 中使用
fflush(stdout);或cout.flush(); - 在 Java 中使用
System.out.flush(); - 在 Python 中使用
sys.stdout.flush()或print(..., flush=True)
样例
下面给出一个可能的交互样例(为了说明,加入了额外的空行)。假设交互器的数据为:
输入
2
1 3 2 5
L
L
输出
Ash
R
L
一次可能的过程说明如下:
-
你读入
2和序列1 3 2 5,选择扮演先手灰,于是输出Ash。 -
初始序列为
[1, 3, 2, 5],轮到你行动:- 你输出
R,取走最右端的5,你的得分为5,序列变为[1, 3, 2]。
- 你输出
-
轮到对手行动:
- 你读入对手输出的
L,对手取走1,对手得分为1,序列变为[3, 2]。
- 你读入对手输出的
-
再次轮到你:
- 你输出
L,取走3,你的得分为5 + 3 = 8,序列变为[2]。
- 你输出
-
最后轮到对手:
- 你读入对手输出的
L,对手取走2,对手得分为1 + 2 = 3,序列变为空。
- 你读入对手输出的
最终,你的得分为 8,对手得分为 3,你获胜,因此该测试点将被判为 Accepted。
相关
在下列比赛中: