codeforces赛后总结——1556D. Take a Guess

题目见:Problem - D - Codeforces

有点意思的交互题,核心是(a+b)=(a&b)+(a|b)。

对(a1+ai)进行排序即可得到(a1+ans)。

再求一下a1的值就可以。

#include <bits/stdc++.h>
#define N 10010
using namespace std;
int n,k,tmp1,tmp2;
int a1,a1_plus[N],a23;
int main()
{
    scanf("%d%d",&n,&k);
    for(int i=2;i<=n;i++)
    {
        printf("and 1 %d\n",i);
        fflush(stdout);
        printf("or 1 %d\n",i);
        fflush(stdout);
        scanf("%d%d",&tmp1,&tmp2);
        a1_plus[i]=tmp1+tmp2;
    }
    printf("and 2 3\n");
    printf("or 2 3\n");
    fflush(stdout);
    scanf("%d%d",&tmp1,&tmp2);
    a23=tmp1+tmp2;
    a1=(a1_plus[2]+a1_plus[3]-a23)/2;
    a1_plus[1]=a1+a1;
    sort(a1_plus+1,a1_plus+1+n);
    printf("finish %d\n",a1_plus[k]-a1);
    fflush(stdout);
    return 0;
}

 

posted @ 2021-09-13 22:23  AL76  阅读(33)  评论(0编辑  收藏  举报