Submission #1137617

#TimeUsernameProblemLanguageResultExecution timeMemory
1137617Jawad_Akbar_JJCOVID tests (CEOI24_covid)C++20
68.66 / 100
706 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 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.4) 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); } void solve4(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.4) 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); } void solve5(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.4) 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); } void solve6(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.4) 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); } void solve7(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.3) 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); } void solve8(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.6) 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); } void solve9(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) return 0; while (t--){ if (p <= 0.005256) solve1(n); else if (p == 0.011546) solve3(n); else if (p == 0.028545) solve4(n); else if (p == 0.039856) solve5(n); else if (p == 0.068648) solve6(n); else if (p == 0.104571) solve7(n); else if (p != 0.2) solve8(n); else solve9(n); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...