#243. [CFCOI Collection 2] Guessing Binary String
[CFCOI Collection 2] Guessing Binary String
版权声明
题目来源:https://www.luogu.com.cn/problem/T715247
题目在导入时有改动。
本题的时间限制为 10 秒。
题目描述
对于一个长度为 的 01 串 和一个各项均在 中取值的序列 ,定义
- 升序枚举 ,其中 为 的长度:
- 将 的第 位取反, 变成 , 变成 。
- 定义 等于枚举结束后的 01 串 。
交互库有一个长度为 的 01 串 。
在交互开始前,你可以得到 的值。
你有 次交互机会。对于每次交互,你可以指定一个 01 串 ,并得到满足 且最短的序列 的数量。
请利用这 次交互机会求出 。
你需要在单个测试点中解决 组数据。
交互方式
本题是交互题。
本题提供额外头文件 "binary.h",你需要使用它进行交互:
| 函数 | 描述 | 限制 | 可调用次数(每组数据) |
|---|---|---|---|
int init(); |
它返回 的值,表示数据组数。 | 无 | 不限 |
int start(); |
它返回 的值。 | ||
void reject(); |
如果你认为问题不可能解决,请在调用 interact()前调用它。 |
你必须在调用后结束本组数据的交互。 | |
long longinteract(string T); |
它返回满足且最短的序列 的数量。 | 你必须保证 是长度为 的 01 串。 | |
void stop(string S); |
你需要传入 01 串 的值。 | 你必须在调用后结束本组数据的交互。 |
请在以下模板上答题。
#include <bits/stdc++.h>
#include "binary.h"
using namespace std;
int main()
{
int T = init(); // // 得到 T 的值
while (T--) // T 组数据
{
int n = start(); // 得到 n 的值
if (...) // 如果无解
{
reject();
continue;
}
// 否则,有解
string S = ""; // 答案
for (int i = 1; i <= n; i++)
S += "0";
// 在此处利用 interact 进行交互
stop(S); // 提交答案
}
return 0;
}
样例
请注意,该样例的 不满足数据范围,因此不会出现在测试数据中。
在下面的样例中:
- 。
- 对于第 1 组数据,,。
- 对于第 2 组数据,,。
- 对于第 3 组数据,,。
以下的交互过程可以获得 AC。
| 调用函数 | 返回值 | 解释 |
|---|---|---|
init(); |
。 | |
start(); |
第 1 组数据开始,。 | |
reject(); |
此时任何询问都返回 (无论 是什么),因此无解。 | |
start(); |
第 2 组数据开始,。 | |
reject(); |
可以证明此时依然无解。 | |
start(); |
第 3 组数据开始,。 | |
interact("111000"); |
这个序列是空序列。 | |
interact("101010"); |
这两个序列是 和 。 | |
interact("111111"); |
限于篇幅,不予解释。 | |
interact("000111"); |
||
interact("010101"); |
||
interact("000000"); |
||
stop("111000"); |
提交的答案为 ,答案正确。 |