codeforces赛后总结——1556D. Take a Guess
有点意思的交互题,核心是(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; }