- 243's solution
-
P243's Solution
- @ 2026-4-5 11:14:11
当 时无解。
依次询问所有某一位为 而其他位为 的 01 串:
- 如果结果都是 ,那么 是全 串。
- 如果结果都相等但不是 ,那么 是全 串。
- 如果结果不全相等,结果小的表明那一位为 ,大的表明那一位为 。
#include <bits/stdc++.h>
#include "binary.h"
using namespace std;
long long ans[22];
int main()
{
int T = init();
while (T--)
{
int n = start();
if (n <= 2)
{
reject();
continue;
}
string S = "";
for (int i = 1; i <= n; i++)
S += "0";
string T = S;
for (int i = 0; i <= n - 1; i++)
{
T[i] = '1';
ans[i] = interact(T);
T[i] = '0';
}
bool ok = true;
long long p1 = 0, p2 = 9e18;
for (int i = 0; i <= n - 1; i++)
{
if (ans[i] != 1) ok = false;
p1 = max(p1, ans[i]);
p2 = min(p2, ans[i]);
}
if (ok)
{
stop(S);
continue;
}
S = "";
for (int i = 0; i <= n - 1; i++)
{
if (ans[i] == p2) S += "1";
if (ans[i] != p2) S += "0";
}
stop(S);
}
return 0;
}