AT_joisc2022_g.壊れた機器 2 (Broken Device 2)

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是一道通信题。

题意

D-taro 会给 Anna 一个整数,目标就是让 Anna 将这个整数发送给 Bruno。

游戏开始时,Anna 声明了一个在 11 到 20002000 之间的整数 mm,接下来他们玩 QQ 轮游戏。第 ii 轮游戏的过程如下:

  1. D-taro 向 Anna 给出一个整数 AiA_i。

  2. Anna 向通信设备输入两个数组 si,tis_i,t_i,数组的每个元素 si,tis_i,t_i 应当是 00 或 11,并且两者的长度相同且均为某个 11 到 mm 之间的整数。

  3. 令 uiu_i 为 sis_i 和 tit_i 经过乱序归并得到的结果,通信设备会向 Bruno 发送 uiu_i。

  4. Bruno 告诉 D-taro 一个整数,如果这个整数和 AiA_i 相同,Anna 和 Bruno 在这轮获胜。

以下是乱序归并的定义:

我们称数组 ZZ 是数组 XX 和数组 YY 经过乱序归并得到的结果当且仅当:存在一种划分方式,将 ZZ 中的元素划成两个集合,满足:

  • 第一个集合中的元素按在 ZZ 中的位置顺次连接得到的数组是 XX。
  • 第二个集合中的元素按在 ZZ 中的位置顺次连接得到的数组是 YY。

例如:数组 [1‾,1‾,1,0,0,0‾][\underline{1},\underline{1},1,0,0,\underline{0}] 可以由数组 [1,1,0][1,1,0] 和数组 [1,0,0][1,0,0] 乱序归并得到。

请你实现 Anna 和 Bruno 的策略。

任务

你需要提交一份源文件,包括以下两个部分。

Anna

你必须引用 Anna.h。

这份代码需要实现 Anna 的策略,因此你需要实现如下过程:

int Declare();

这个函数会在每个测试点评测开始时被调用一次。

函数的返回值是 Anna 声明的 mm。mm 必须是 11 到 20002000 之间的整数,否则程序将被判为 Wrong Answer [1]。

std::pair < std::vector <int>, std::vector <int> > Anna(long long A);

在 Declare 被调用后,这个函数会被调用 QQ 次。第 ii 次调用对应第 ii 轮游戏的前两轮之间。

参数 A\texttt{A} 表示 D-taro 向 Anna 给出的整数。
这个函数的返回值应当是两个数组 si,tis_i,t_i,即 Anna 向通信设备输入的字符串。si,tis_i,t_i 应当只包含字符 0 或 1,否则程序将被判为 Wrong Answer [2]。

数组 si,tis_i,t_i 的长度应当在 11 和 mm 之间,否则程序将被判为 Wrong Answer [3]。数组 si,tis_i,t_i 应当具有相同的长度,否则程序将被判为 Wrong Answer [4]。

Bruno

你必须引用 Bruno.h。

这份代码需要实现 Bruno 的策略,因此你需要实现如下过程:

long long Bruno(std::vector <int> u);

每当 Anna 将数组对输入设备,调用该函数一次,因此这个函数的第 ii 次调用对应游戏第 ii 轮的第 33 步和第 44 步之间的过程。

参数 u\texttt{u} 是第 ii 轮中,Bruno 接收到的字符串 uiu_i。返回值是 Bruno 向 D-taro 给出的数。返回值应当与 D-taro 向 Anna 给出的相同,否则你的程序将被判为 Wrong Answer [5]。

样例评测库

见附件下载中的 grader.cpp。

你可以通过如下命令编译样例交互库:

g++ -std=gnu++17 -O2 -o grader grader.cpp Anna.cpp Bruno.cpp

输入格式

第一行一个整数 QQ。

接下来 QQ 行每行一个整数 AiA_i。

输出格式

如果你的程序正确运行,样例交互库将会输出形如 Accepted: m 的信息,其中
mm 为 Declare 的返回值。

否则会输出形如 Wrong Answer [x] 的信息返回错误编号。

说明/提示

样例评测库的乱序归并是使用伪随机数完成的,这意味着重复允许程序,乱序归并的方式是相同的。你可以通过添加运行参数来改变伪随机数种子,例如:

./grader 2022

样例

input

2
42
2000

explanation

函数调用 返回值
Declare() 4
Anna(42) ([0, 0, 1, 0], [1, 1, 0, 1])
Bruno([1, 0, 0, 1, 0, 1, 0, 1]) 42
Anna(2000) ([0, 1], [0, 0])
Bruno([0, 0, 1, 0]) 2000

在这组样例中,进行了 Q(=2)Q(=2) 轮游戏。

数据范围与评分方式

  • 1≤Q≤10001\leq Q\leq 1000
  • 1≤Ai≤10181\leq A_i\leq 10^{18}

Subtasks

  • (5 points) Ai≤2000\text{(5 points) } A_i\leq 2000
  • (5 points) Ai≤4×106\text{(5 points) } A_i\leq 4\times 10^6
  • (3 points) Ai≤107\text{(3 points) } A_i\leq 10^7
  • (12 points) Ai≤108\text{(12 points) } A_i\leq 10^8
  • (15 points) Ai≤1011\text{(15 points) } A_i\leq 10^{11}
  • (60 points)\text{(60 points)} 无特殊限制,评分方式如下:

这个子任务的得分是所有测试点得分的最小值。

对于某个测试点,他的得分由 mm 决定,如下表:

mm 得分
201≤m≤2000201\leq m\leq 2000 40−25×log⁡10(m200)40-25\times \log_{10}\left(\frac{m}{200}\right)
161≤m≤200161\leq m\leq 200 4040
156≤m≤160156\leq m\leq 160 4444
151≤m≤155151\leq m\leq 155 4848
146≤m≤150146\leq m\leq 150 5252
141≤m≤145141\leq m\leq 145 5656
m≤140m\leq 140 6060
保证得分的交互过程中,交互库分别不会使用超过 0.5s\texttt{0.5s} 时间和 32MB\texttt{32MB} 空间。

时间限制:两份程序分别 2s\texttt{2s}。

空间限制:两份程序分别 512MB\texttt{512MB}。

附件

输入解题思路,AI测评打分。不知道怎么写?

首页