Logo Infinity Online Judge

InfOJ

时间限制:1 s 空间限制:256 MB
统计

本题是交互题,只支持 C++14 / C++17。

题目描述

有这样一个博弈问题:

  • A 和 B 在互相不知道对方的决策的前提下,选择 0 或 1 中的一个。
  • 如果 A,B 都选择 0,则两人都获得 10 分。
  • 如果 A,B 都选择 1,则两人都获得 40 分。
  • 如果 A,B 一个选择 0 一个选择 1,则选择 0 的获得 60 分,选择 1 的获得 0 分。

两人都希望自己的得分更高。

你需要和某个人(不是交互库,见后述说明)玩两轮这个游戏,你的得分是你在两轮中得分的和。具体地,过程如下:

  1. 你和对手同时进行第一轮决策。
  2. 第一轮出结果,对手的决策在这时会告知你,你的决策也会告知对手。
  3. 你和对手同时进行第二轮决策。
  4. 计算你在两轮中得分的和,作为你的最终分数。

你并不知道你对手的策略,你也不知道你的对手是谁,但你希望你的得分之和最大。

实现细节

本题为交互题,你需要包含头文件 mybad.h

你需要实现函数 void solve()

首先,你需要调用函数 void report_step1(bool x),表示你第一轮决策。

接着,你可以调用函数 bool get_opponent_step1(),来获得对手第一轮决策的结果。

接着,你需要调用函数 void report_step2(bool x),表示你第二轮决策。

然后,solve 函数结束。

同一个测试点中,solve 函数可能会被调用多次(不超过 $10000$ 次)。你的得分是每次游戏得分的平均值按照某种方式归一化到 $[0,100]$ 后的结果。

说明

保证对手进行决策时,不知道你的决策。

赛时评测时,由于技术限制,你是和一个固定的交互库比赛。赛后会重测本题,赛时得分与最终得分没有任何保证的关系。

保证最终评测时,你的对手不是我们写的的交互库,而是真实存在的对手。