Codeforces 1103B Game with modulo(交互题)

题目链接:https://codeforces.com/problemset/problem/1103/B

题目大意:求a的值。你可以问机器两个数x和y,当x%a>=y%a时返回x,否则返回y。最多可问60次。

解题思路:

从[0,1],[1,2],[2,4]开始枚举x和y,使y总是为x的两倍。如果a>y,返回的就是y,否则说明a在区间[x,y]之间。

然后二分区间[x,y],如果询问(mid,y)返回x,说明a在[x,mid];否则,a在[mid,y]。

当x+1==y时,y就是答案。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 char ask(int x,int y)
 5 {
 6     char t;
 7     printf("? %d %d\n",x,y);
 8     fflush(stdout);
 9     cin>>t;
10     return t;
11 }
12 int main()
13 {
14     string s;
15     while(cin>>s){
16         if(s=="end") break;
17         int l=0,r=1;
18         while(ask(l,r)=='y')
19         {
20             l=r;
21             r*=2;
22         }
23         while(l+1<r)
24         {
25             int mid=(l+r)/2;
26             if(ask(mid,r)=='x')
27                 l=mid;
28             else r=mid;
29         }
30         printf("! %d\n",r);
31         fflush(stdout);
32     }
33     return 0;
34 }
View Code

 

posted @ 2019-01-23 13:28  三亿鼠标De梦想  阅读(424)  评论(0编辑  收藏  举报