码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 862D. Mahmoud and Ehab and the binary string (二分)

时间:2018-03-13 18:06:28      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:pos   ons   span   二分   i++   return   def   一个   abs   

题目链接:Mahmoud and Ehab and the binary string

题意:

  一道交互题,首先给出一个字符串的长度l。现在让你进行提问(最多15次),每次提问提出一个字符串,会返回这个字符串与目标串之间不同的字符的个数。要在15次的提问内,找到目标串中任意一个1和0的位置。

题解:

  因为是15次提问,其实可以想到二分,但是分别对0和1进行二分差不多要二十多次,所以可以对01或10进行二分,查找某一个01或10串的位置。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int MAX_N = 1e5+9;
 4 int vec[MAX_N];
 5 int main()
 6 {
 7     int N,M,T;
 8     cin>>N;
 9     printf("?\n");
10     for(int i=1;i<=N;i++) printf("0");
11     cout<<endl;
12     int num;
13     cin>>num;
14     int l = 1,r = N,x;
15     while(r-l>=2)
16     {
17         int mid = (l+r)/2;
18         printf("?\n");
19         for(int i=1;i<=N;i++)
20         {
21             if(i>=l && i<=mid) printf("1");
22             else printf("0");
23         }
24         cout<<endl;
25         cin>>x;
26         if(abs(num - x) == mid - l + 1) l = mid;
27         else r = mid;
28     }
29     int x1,x2;
30     printf("?\n");
31     for(int i=1;i<=N;i++)
32     {
33         if(i == l) printf("1");
34         else printf("0");
35     }
36     cout<<endl;
37     cin>>x1;
38     if(x1<num)
39     {
40         printf("! %d %d\n",r,l);
41     }
42     else printf("! %d %d\n",l,r);
43     return 0;
44 }

 

Codeforces 862D. Mahmoud and Ehab and the binary string (二分)

标签:pos   ons   span   二分   i++   return   def   一个   abs   

原文地址:https://www.cnblogs.com/doggod/p/8559184.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!