Submission #1034987

#TimeUsernameProblemLanguageResultExecution timeMemory
1034987TAMREFCOVID tests (CEOI24_covid)C++17
47.31 / 100
1424 ms468 KiB
// C #ifndef _GLIBCXX_NO_ASSERT #include <cassert> #endif #include <cctype> #include <cerrno> #include <cfloat> #include <ciso646> #include <climits> #include <clocale> #include <cmath> #include <csetjmp> #include <csignal> #include <cstdarg> #include <cstddef> #include <cstdio> #include <cstdlib> #include <cstring> #include <ctime> #if __cplusplus >= 201103L #include <ccomplex> #include <cfenv> #include <cinttypes> #include <cstdbool> #include <cstdint> #include <ctgmath> #include <cwchar> #include <cwctype> #endif // C++ #include <algorithm> #include <bitset> #include <complex> #include <deque> #include <exception> #include <fstream> #include <functional> #include <iomanip> #include <ios> #include <iosfwd> #include <iostream> #include <istream> #include <iterator> #include <limits> #include <list> #include <locale> #include <map> #include <memory> #include <new> #include <numeric> #include <ostream> #include <queue> #include <set> #include <sstream> #include <stack> #include <stdexcept> #include <streambuf> #include <string> #include <typeinfo> #include <utility> #include <valarray> #include <vector> #if __cplusplus >= 201103L #include <array> #include <atomic> #include <chrono> #include <condition_variable> #include <forward_list> #include <future> #include <initializer_list> #include <mutex> #include <random> #include <ratio> #include <regex> #include <scoped_allocator> #include <system_error> #include <thread> #include <tuple> #include <typeindex> #include <type_traits> #include <unordered_map> #include <unordered_set> #endif #define va first #define vb second #define lb lower_bound #define ub upper_bound #define bs binary_search #define pp push_back #define ep emplace_back #define all(v) (v).begin(), (v).end() #define szz(v) ((int)(v).size()) #define bi_pc __builtin_popcount #define bi_pcll __builtin_popcountll #define bi_tz __builtin_ctz #define bi_tzll __builtin_ctzll #define fio \ ios_base::sync_with_stdio(0); \ cin.tie(0); #ifdef TAMREF #define debug(...) fprintf(stderr, __VA_ARGS__) #else #define debug(...) 42 #endif using namespace std; template <typename... Args> void logger(string vars, Args &&...values) { cerr << vars << " = "; string delim = ""; (..., (cerr << delim << values, delim = ", ")); cerr << '\n'; } #ifdef TAMREF #define deb(...) logger(#__VA_ARGS__, __VA_ARGS__) #else #define deb(...) 42 #endif using ll = long long; using lf = long double; using pii = pair<int, int>; using ppi = pair<int, pii>; using pll = pair<ll, ll>; using pff = pair<lf, lf>; using ti = tuple<int, int, int>; using base = complex<double>; const lf PI = 3.14159265358979323846264338L; template <typename T> inline T umax(T &u, T v) { return u = max(u, v); } template <typename T> inline T umin(T &u, T v) { return u = min(u, v); } mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); map<lf, lf> score = { {0.001, 15.1}, {0.005256, 51.1}, {0.011546, 94.9}, {0.028545, 191.5}, {0.039856, 246.3}, {0.068648, 366.2}, {0.104571, 490.3}, {0.158765, 639.1}, {0.2, 731.4}}; string ans; int n, t, qnt, lqnt, mqnt; lf p; int query(string F) { ++qnt; ++lqnt; #ifndef TAMREF cout << "Q " << F << '\n'; cout << flush; #endif int q = 0; #ifdef TAMREF for (int i = 0; i < n; i++) q |= (ans[i] == '1') && (F[i] == '1'); #else string S; cin >> S; q = (S == "P"); #endif return q; } int query_seg(int i, int j) { if (i > j) return 0; string f(n, '0'); for (int k = i; k <= j; k++) f[k] = '1'; return query(f); } int query_seg(pii x) { return query_seg(x.va, x.vb); } void answer(string F) { mqnt = max(mqnt, lqnt); lqnt = 0; #ifndef TAMREF cout << "A " << F << '\n'; cout << flush; #endif #ifdef TAMREF assert(ans == F); #else string C; cin >> C; assert(C == "C"); #endif } lf dp[1005], dp2[1005]; lf pows[1005] = {1.0}; pii opt[1005]; vector<pii> initial_segs; void init() { if (t > 1 && initial_segs.empty()) { for (int i = 1; i <= n; i++) pows[i] = pow(1.0L - p, i); for (int i = 2; i <= n; i++) { dp[i] = 10.L * i; int sj = (i <= 20 ? 1 : 10); for (int j = sj; j + j <= i; j++) { lf pdp = pows[j] * (1.L + dp[i - j]) + (1.L - pows[j]) * (1.L + dp[j] + 1.L + (1.L - pows[i - j]) * dp[i - j]); if (pdp < dp[i] + 0.01) { debug("dp[%d] = %.3Lf <- pdp[%d] = %.3Lf\n", i, dp[i], j, pdp); dp[i] = pdp; opt[i] = pii(j, 0); } } for (int j = 1; j + j < i; j++) { lf pdp = (1.L + (1.L - pows[j]) * dp[j]) * (i / j) + (1.L + (1.L - pows[i % j]) * dp[i % j]); if (pdp < dp[i]) { dp[i] = pdp; opt[i] = pii(j, 1); } } } debug("dp[%d] = %.3Lf\n", n, dp[n]); initial_segs.emplace_back(0, n - 1); } #ifdef TAMREF uniform_real_distribution<lf> d(0, 1); ans = string(n, '0'); for (int i = 0; i < n; i++) ans[i] = (d(rng) < p ? '1' : '0'); #endif } void run_det() { string ans(n, '0'); for (int i = 0; i < n; i++) { if (query_seg(i, i)) ans[i] = '1'; } answer(ans); } void run() { string submit(n, '0'); deque<pii> segs; for (auto &v : initial_segs) { if (query_seg(v)) segs.emplace_back(v); } while (szz(segs)) { pii sg = segs.front(); segs.pop_front(); if (sg.va == sg.vb) { submit[sg.va] = '1'; continue; } if (sg.va + 1 == sg.vb) { if (query_seg(sg.va, sg.va)) { submit[sg.va] = '1'; if (query_seg(sg.vb, sg.vb)) { submit[sg.vb] = '1'; } } else { submit[sg.vb] = '1'; } continue; } int len = sg.vb - sg.va + 1; auto [m, kind] = opt[len]; debug("dp[%d] = %.3Lf, opt[%d] = (%d, %d)\n", len, dp[len], len, m, kind); if (kind == 0) { pii lsg(sg.va, sg.va + m - 1), rsg(sg.va + m, sg.vb); if (lsg.va <= lsg.vb && query_seg(lsg)) { segs.push_back(lsg); if (rsg.va <= rsg.vb && query_seg(rsg)) { segs.push_back(rsg); } } else { if (rsg.va <= rsg.vb) { segs.push_back(rsg); } } } else { assert(kind == 1); for(int k = sg.va; k <= sg.vb; k += m) { pii p(k, min(k + m - 1, sg.vb)); if ( query_seg(p) ) { segs.push_back(p); } } } } answer(submit); } int main() { cin >> n >> p >> t; if (t == 1) { init(); run_det(); } else { for (int j = 0; j < t; j++) { init(); run(); } debug("average query: %.3Lf\n", lf(qnt) / t); debug("max query: %d\n", mqnt); debug("thres: %.3Lf", score.lower_bound(p - 1e-7)->vb); } }

Compilation message (stderr)

Main.cpp: In function 'void init()':
Main.cpp:106:20: warning: statement has no effect [-Wunused-value]
  106 | #define debug(...) 42
      |                    ^~
Main.cpp:235:21: note: in expansion of macro 'debug'
  235 |                     debug("dp[%d] = %.3Lf <- pdp[%d] = %.3Lf\n", i, dp[i], j, pdp);
      |                     ^~~~~
Main.cpp:106:20: warning: statement has no effect [-Wunused-value]
  106 | #define debug(...) 42
      |                    ^~
Main.cpp:252:9: note: in expansion of macro 'debug'
  252 |         debug("dp[%d] = %.3Lf\n", n, dp[n]);
      |         ^~~~~
Main.cpp: In function 'void run()':
Main.cpp:106:20: warning: statement has no effect [-Wunused-value]
  106 | #define debug(...) 42
      |                    ^~
Main.cpp:319:9: note: in expansion of macro 'debug'
  319 |         debug("dp[%d] = %.3Lf, opt[%d] = (%d, %d)\n", len, dp[len], len, m, kind);
      |         ^~~~~
Main.cpp: In function 'int main()':
Main.cpp:106:20: warning: statement has no effect [-Wunused-value]
  106 | #define debug(...) 42
      |                    ^~
Main.cpp:371:9: note: in expansion of macro 'debug'
  371 |         debug("average query: %.3Lf\n", lf(qnt) / t);
      |         ^~~~~
Main.cpp:106:20: warning: statement has no effect [-Wunused-value]
  106 | #define debug(...) 42
      |                    ^~
Main.cpp:372:9: note: in expansion of macro 'debug'
  372 |         debug("max query: %d\n", mqnt);
      |         ^~~~~
Main.cpp:106:20: warning: statement has no effect [-Wunused-value]
  106 | #define debug(...) 42
      |                    ^~
Main.cpp:373:9: note: in expansion of macro 'debug'
  373 |         debug("thres: %.3Lf", score.lower_bound(p - 1e-7)->vb);
      |         ^~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...