Submission #1256419

#TimeUsernameProblemLanguageResultExecution timeMemory
1256419bynixCOVID tests (CEOI24_covid)C++20
73.95 / 100
518 ms440 KiB
#include "bits/stdc++.h"
using namespace std;

string allzero(1000, '0');
vector<int> res;
int ct;

void upd(int l, int r, int v){
  for (int i = l; i <= r; i++) res[i] = v;
  ct += r - l + 1;
}

int query(int l, int r){
  string q = allzero;
  for (int i = l; i <= r; i++) q[i] = '1';
  cout << "Q " << q << endl;
  char v; cin >> v;
  return (v == 'P');
}

void done(){
  cout << "A ";
  for (int i = 0; i < 1000; i++) cout << res[i]; 
  cout << endl;
  char t; cin >> t;
}

int main(){
  int N, T; double P;
  cin >> N >> P >> T;
  cin.tie(0)->sync_with_stdio(0);

  int S = 1000; 
  for (int i = 1000; i >= 1; i--)
    if (1000%i == 0){
      if (P*(i) < 0.5){
        S = i; break;
      }
    }

  if (T == 1){
    res.clear(); res.resize(N, 0);
    ct = 0;
    for (int i = 0; i < N; i++) res[i] = query(i, i);
    done();
  } else {
    while (T--){
      res.clear(); res.resize(N, 0); ct = 0;
      int l = 0, r = min(N, l + S - 1);
      while (ct < N){
        if (query(l, r)){
          int L = l, R = r;
          while (L < R){
            int mid = (L+R)/2;
            if (query(L, mid)) R = mid;
            else upd(L, mid, 0), L = mid + 1;
          }
          upd(L, R, 1);
          l = L+1, r = min(N-1,L+S);
        } else {
          upd(l, r, 0);
          l += S, r += S, l = min(l, N-1), r = min(r, N-1);
        }
      }
      done();
    }
  }

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...