제출 #1137588

#제출 시각아이디문제언어결과실행 시간메모리
1137588Jawad_Akbar_JJCOVID tests (CEOI24_covid)C++20
37.62 / 100
917 ms408 KiB
#include <iostream> #include <vector> using namespace std; long double p, p2; char c; bool isPositive(int n, int l, int r){ string s(n, '0'); cout<<"Q "; for (int j=1;j<=n;j++) if (j >= l and j <= r) s[j-1] = '1'; cout<<s<<endl; cin>>c; return (c == 'P'); } void solve1(int n){ vector<int> vec(n + 1, 0); for (int i=1, lp = n + 1;i<=n;){ if (lp == i){ vec[i] = 1; i++; lp = n + 1; continue; } int b = 31 - __builtin_clz(lp - i); if (isPositive(n, i, i + (1<<b) - 1)) lp = i + (1<<b) - 1; else i += (1<<b); } cout<<"A "; for (int i=1;i<=n;i++) cout<<vec[i]; cout<<endl; cin>>c; if (c == 'W') exit(0); } void solve2(int n){ vector<int> vec(n + 1, 0); for (int i=1, lp = n + 1;i<=n;i++) if (isPositive(n, i, i)) vec[i] = 1; cout<<"A "; for (int i=1;i<=n;i++) cout<<vec[i]; cout<<endl; cin>>c; if (c == 'W') exit(0); } void solve3(int n){ vector<int> vec(n + 1, 0); for (int i=1, lp = n + 1;i<=n;){ if (lp == i){ vec[i] = 1; i++; lp = n + 1; continue; } if (lp == n + 1){ p2 = 1; int nw; for (nw=i;nw<=n;nw++){ p2 *= (1 - p); if (p2 <= 0.5) break; } nw = min(nw, n); if (isPositive(n, i, nw)) lp = nw; else i = nw + 1; continue; } int b = 31 - __builtin_clz(lp - i); if (isPositive(n, i, i + (1<<b) - 1)) lp = i + (1<<b) - 1; else i += (1<<b); } cout<<"A "; for (int i=1;i<=n;i++) cout<<vec[i]; cout<<endl; cin>>c; if (c == 'W') exit(0); } int main(){ int n, t; cin>>n>>p>>t; if (t == 1){ solve3(n); return 0; } while (t--){ if (p <= 0.011546) solve1(n); else if (p >= 0.15) solve2(n); else solve3(n); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...