yicongli

CF862D

Jan 20th, 2021 (edited)
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.15 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define gc c=getchar()
  6. #define r(x) read(x)
  7. #define ll long long
  8.  
  9. template<typename T>
  10. inline void read(T&x){
  11.     x=0;T k=1;char gc;
  12.     while(!isdigit(c)){if(c=='-')k=-1;gc;}
  13.     while(isdigit(c)){x=x*10+c-'0';gc;}x*=k;
  14. }
  15.  
  16. const int N=1005;
  17.  
  18. int n;
  19. char s[N];
  20.  
  21. inline int ask(){
  22.     putchar('?');
  23.     putchar(' ');
  24.     for(int i=0;i<n;++i)putchar(s[i]);
  25.     putchar('\n');
  26.     fflush(stdout);
  27.     int x;r(x);
  28.     return x;
  29. }
  30.  
  31. int main(){
  32.     // freopen(".in","r",stdin);
  33.     // freopen(".out","w",stdout);
  34.     r(n);
  35.     for(int i=0;i<n;++i)s[i]='0';
  36.     int a=ask();
  37.     s[0]++;
  38.     int b=ask();
  39.     int ans0,ans1;
  40.     if(a>b){
  41.         ans1=0;
  42.         int l=1,r=n-1,mid;
  43.         while(l<=r){
  44.             if(l==r){
  45.                 ans0=l;
  46.                 break;
  47.             }
  48.             mid=(l+r)>>1;
  49.             for(int i=0;i<n;++i)s[i]=(l<=i && i<=mid)+'0';
  50.             if(a-ask()==(mid-l+1))l=mid+1;
  51.             else r=mid;
  52.         }
  53.     }
  54.     else {
  55.         ans0=0;
  56.         int l=1,r=n-1,mid;
  57.         while(l<=r){
  58.             if(l==r){
  59.                 ans1=l;
  60.                 break;
  61.             }
  62.             mid=(l+r)>>1;
  63.             for(int i=0;i<n;++i)s[i]=(l<=i && i<=mid)+'0';
  64.             if(ask()-a==(mid-l+1))l=mid+1;
  65.             else r=mid;
  66.         }
  67.     }
  68.     printf("! %d %d\n",ans0+1,ans1+1);
  69.     fflush(stdout);
  70.     return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment