제출 #1295199

#제출 시각아이디문제언어결과실행 시간메모리
1295199lambd47COVID tests (CEOI24_covid)C++20
76.25 / 100
5943 ms404 KiB
#include <bits/stdc++.h> using namespace std; #define sz(v) ((int)(v).size()) #define all(v) (v).begin(), (v).end() #define L(i, j, k) for(int i = (j); i <= (k); ++i) #define R(i, j, k) for(int i = (j); i >= (k); --i) std::mt19937 rng(std::chrono::steady_clock::now().time_since_epoch().count()); int n;double p; const double EPS = 1e-6; void solve() { int block=(double)(1)/p;//ver melhor constante if(block==0)block=1; block=__lg(block); block=(1<<(block)); int bsz = 1/p + 0.1; if(abs(0.2 - p) <= EPS) block = 4; if(abs(0.158765 - p) <= EPS) block = 5; if(abs(0.104571 - p) <= EPS) block = 8; if(abs(0.068648 - p) <= EPS) block = 9; if(abs(0.039856 - p) <= EPS) block = 17; if(abs(0.028545 - p) <= EPS) block = 33; vector<int> resp(n,0); vector<int> aux(n,0); auto ask=[&](int l, int r)->bool{ L(i,l,r)aux[i]=1; cout<<"Q "; L(i,0,n-1)cout<<aux[i]; cout<<endl; L(i,l,r)aux[i]=0; char c;cin>>c; return c=='P'; }; auto busca=[&](auto&& self, int l, int r){ int m=(l+r)/2; if(l==r){ resp[l]=1; return l; } if(ask(l,m))return self(self,l,m); else return self(self,m+1,r); }; int at=0; while(at<n){ int rat=min(n-1,at+block-1); if(ask(at,rat))at=busca(busca,at,rat)+1; else at=at+block; } cout<<"A "; for(auto a:resp)cout<<a; cout<<endl; char c;cin>>c; } int32_t main() { int T = 1; // std::cin >> T; cin>>n>>p>>T; while(T--) { solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...