【Codeforces】#499 (Div. 2) D.Rocket

地址

[http://codeforces.com/contest/1011/problem/D][1]

题目

不放了,复制了格式各种乱

思路

看到n=30,最多让你问60次,肯定有问题 所以很容想到通过前n次每次询问1来判断说的是真是假,然后就是二分了

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <bits/stdc++.h>

using namespace std;

#define MP make_pair
#define PB push_back
typedef long long LL;
typedef pair<int,int> PII;
const double eps=1e-8;
const double pi=acos(-1.0);
const int K=1e6+7;
const int mod=1e9+7;




int main(void)
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n,m,ret[200];
cin>>n>>m;
int l=1,r=n;
for(int i=1;i<=m;i++)
{
printf("1\n");fflush(stdout);
scanf("%d",ret+i);
if(ret[i]==0)
return 0;
}
for(int i=1,x;i<=60;i++)
for(int j=1;j<=m;j++)
{
int mid=l+r>>1;
printf("%d\n",mid);fflush(stdout);
scanf("%d",&x);
if(!x) return 0;
if(ret[j]*x>0) l=mid+1;
else r=mid-1;
}
return 0;
}

[1]: [http://codeforces.com/contest/1011/problem/D][1]