贪心
试图通过询问 $\texttt{01}$ 和 $\texttt{10}$ 的数量找到一种做法,但是这种做法无法辨识 $\texttt{0110}$ 和 $\texttt{1001}$,遂放弃,阅读题解。
首先询问 $\texttt{0}$ 的数量,然后询问 $\texttt{00}$ 的数量和 $\texttt{10}$ 的数量分别记为 $k_1,k_2,k_3$,后两个询问即询问 $\texttt{0}$ 左边有多少个位置是 $\texttt{0}$ 有多少个位置是 $\texttt{1}$。因为 $s_1$ 前面没有元素,如果 $s_1 = \texttt{0}$ 则必定有 $k_1 = k_2 + k_3 + 1$;否则必定有 $k_1 = k_2 + k_3$,时间复杂度 $O(1)$。
#include<bits/stdc++.h>
using namespace std;
int n,k1,k2,k3;
void solution(){
scanf("%d",&n);
puts("1 0");
puts("1 00");
puts("1 10");
fflush(stdout);
scanf("%d%d%d",&k1,&k2,&k3);
if(k1==k2+k3) puts("0 1 1");
else puts("0 1 0");
fflush(stdout);
scanf("%*d");
}
int T;
int main(){
scanf("%d",&T);
while(T--) solution();
return 0;
}