#X8G. 「TAOI-3」俄罗斯蓝猫
「TAOI-3」俄罗斯蓝猫
题目背景
小千绘莉想和你玩游戏!
题目描述
小千藏有 个在 中间随机生成的非负整数 。
你一组询问可以向小千给出不超过 个二元组 ,假设 ,小千会告诉你 从小到大排序后的结果。
你可以向小千提出不超过 组询问,你需要按顺序返回 。
需要注意的是:
- 如果你一次询问提出大于 个二元组,或者提出了大于 次询问,你会获得 分。
- 小千不喜欢重复,如果你某次询问的某个二元组有 ,或者有某个无序对 被询问了多次(在一组询问间或两组不同的询问之间)。小千都会扣除部分分数。
- 具体评分标准见下面【评分标准】。
- 请不要在标准输出输出任何内容。否则视为攻击交互库。会被判定为 Wrong Answer。
输入格式
你不需要,也不应该实现 main
函数。
你需要保证你的文件包含了 kiwi.h
。你可以通过在代码开头加入下面语句实现:
#include"kiwi.h"
你需要实现以下函数:
std::vector<long long> game(int n);
其中 表示随机数的数量。
这个函数应当返回一个长度为 的数组,表示你求出的数组 。
你可以调用如下函数:
std::vector<long long> ask(std::vector<int> x,std::vector<int> y);
- 你需要保证 序列长度相同;
- 该函数会返回和 长度相等的序列表示 从小到大排序后的结果。
保证在题目给定的询问次数和 长度的限制下,交互库占用资源不超过 秒和 MiB。
下发 grader.cpp
为参考交互库,和最终的交互库有所不同。你的做法不应该依赖于交互库实现。
下发 kiwi.cpp
为参考实现,你可以通过以下语句来编译你的代码:
g++ grader.cpp kiwi.cpp -o kiwi -O2 -std=c++14 -static
对编译出来的程序,你只需要输入三个正整数 分别表示数据组组数,每组数据的 和随机种子。
实际的交互库中,随机数种子随时间变化。也就是两次不同时间的提交,答案是不同的。
输出格式
输入完成后,交互库会调用 次函数 game
。每次调用结束后会向标准输出输出以下信息:
Wrong Answer[1]
表示你某次调用ask
函数中 长度不相同;Wrong Answer[2]
表示你某次调用ask
函数中 长度大于 ;Wrong Answer[3]
表示你某次调用ask
函数中 的元素不在 内;Wrong Answer[4]
表示你本次game
中调用了超过 次ask
;Wrong Answer[5]
表示你本次调用game
函数返回序列的长度不是 ;Wrong Answer[6]
表示你返回了错误的答案;OK, you can get p points.
表示你返回了正确的答案,并且获得了这个测试点 的分数。评分标准见下面说明。
如果你的代码同时违反了多个规定,只会显示一个,且此时程序会立刻停止。
评分标准
本题首先会受到和传统相同的限制。例如编译错误会导致整道题目得 分,运行时错误、超过时间限制、超过空间限制都会导致相应测试点得 分。选手只能在程序中访问自己定义的和交互库给出的变量或数据,及其相应的内存空间。尝试访问其他位置空间将可能导致编译错误或运行错误。
假设该测试点满分为 。
- 如果你违反了上述 Wrong Answer 的规则,或者在标准输出中输出了内容,会直接得 分。
- 如果你某次调用
ask
时 则 ,否则 ; - 如果你调用
ask
时,询问了两组相同的 则 ,否则 ; - 假设你一共调用了 次
ask
,则:- 如果 ,则 ;
- 如果 ,则 ;
- 如果 ,则 ;
- 如果 ,则 ;
- 如果 ,则 。
- 假设你调用
ask
时, 数组的最大长度为 ,则:- 如果 ,则 ;
- 如果 ,则 ;
- 如果 ,则 ;
- 如果 ,则 ;
- 如果 ,则 ;
- 如果 ,则 。
本测试点的最终得分为所有 game
函数, 最小值向下取整。
数据范围
对所有数据,满足 ,。
- 测试点 1(30 pts):。
- 测试点 2(30 pts):。
- 测试点 3(40 pts):。
下发文件
点击 kiwi.zip 下载文件。