原题链接在这里Problem - D - Codeforces
交互题有一个很重要的考点就是定位问题,上一道交互题我们是用的二分定位,这题根据题目的特征,我们通过枚举去定位
1 #include "bits/stdc++.h" 2 using namespace std; 3 int n,x,y; 4 int main(){ 5 //freopen ("d.in","r",stdin); 6 //freopen ("d.out","w",stdout); 7 int i,j,zt1,zt2; 8 scanf("%d",&n); 9 while (1){ 10 for (i=0;i<n;i++){ 11 printf("? 0 %d ",i);fflush(stdout); 12 scanf("%d",&zt1); 13 if (zt1==n) break; 14 } 15 printf("? 1 %d ",i);fflush(stdout); 16 scanf("%d",&zt1); 17 if (zt1==n){ 18 y=i; 19 for (i=0;i<n-1;i++){ 20 printf("? %d %d ",i,(y+1)%n);fflush(stdout); 21 scanf("%d",&zt2); 22 if (zt2==n){ 23 break; 24 } 25 } 26 x=i; 27 printf("! %d",(y-x+n)%n); 28 break; 29 } 30 else{ 31 x=0; 32 for (i=1;i<n-1;i++){ 33 printf("? %d %d ",1,i);fflush(stdout); 34 scanf("%d",&zt2); 35 if (zt2==n){ 36 break; 37 } 38 } 39 y=i; 40 printf("! %d",(y-x+n)%n); 41 break; 42 } 43 } 44 return 0; 45 }