本题是交互题,只支持 C++14 / C++17。
题目描述
有这样一个博弈问题:
- A 和 B 在互相不知道对方的决策的前提下,选择 0 或 1 中的一个。
- 如果 A,B 都选择 0,则两人都获得 10 分。
- 如果 A,B 都选择 1,则两人都获得 40 分。
- 如果 A,B 一个选择 0 一个选择 1,则选择 0 的获得 60 分,选择 1 的获得 0 分。
两人都希望自己的得分更高。
你需要和某个人(不是交互库,见后述说明)玩两轮这个游戏,你的得分是你在两轮中得分的和。具体地,过程如下:
- 你和对手同时进行第一轮决策。
- 第一轮出结果,对手的决策在这时会告知你,你的决策也会告知对手。
- 你和对手同时进行第二轮决策。
- 计算你在两轮中得分的和,作为你的最终分数。
你并不知道你对手的策略,你也不知道你的对手是谁,但你希望你的得分之和最大。
实现细节
本题为交互题,你需要包含头文件 mybad.h
。
你需要实现函数 void solve()
。
首先,你需要调用函数 void report_step1(bool x)
,表示你第一轮决策。
接着,你可以调用函数 bool get_opponent_step1()
,来获得对手第一轮决策的结果。
接着,你需要调用函数 void report_step2(bool x)
,表示你第二轮决策。
然后,solve
函数结束。
同一个测试点中,solve
函数可能会被调用多次(不超过 $10000$ 次)。你的得分是每次游戏得分的平均值按照某种方式归一化到 $[0,100]$ 后的结果。
说明
保证对手进行决策时,不知道你的决策。
赛时评测时,由于技术限制,你是和一个固定的交互库比赛。赛后会重测本题,赛时得分与最终得分没有任何保证的关系。
保证最终评测时,你的对手不是我们写的的交互库,而是真实存在的对手。