贪心

试图通过询问 $\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;
}
最后修改:2025 年 02 月 24 日
如果觉得我的文章对你有用,请随意赞赏