Submission #1241302

#TimeUsernameProblemLanguageResultExecution timeMemory
1241302rxlfd314Sphinx's Riddle (IOI24_sphinx)C++20
47.50 / 100
32 ms656 KiB
#include "sphinx.h" #include <bits/stdc++.h> using namespace std; using ll = long long; using ari2 = array<int, 2>; using ari3 = array<int, 3>; using arl2 = array<ll, 2>; using arl3 = array<ll, 3>; template <class T> using vt = vector<T>; #define all(x) begin(x), end(x) #define size(x) (int((x).size())) #define REP(a,b,c,d) for(int a=(b);(d)>0?a<=(c):a>=(c);a+=(d)) #define FOR(a,b,c) REP(a,b,c,1) #define ROF(a,b,c) REP(a,b,c,-1) int query(const vt<int> &E) { return perform_experiment(E); } vt<int> find_colours(int N, vt<int> X, vt<int> Y) { const int M = size(X); vt<int> ret(N); if (N <= 50) { FOR(i, 0, N-1) FOR(c, 0, N-1) { vt<int> E(N, c); E[i] = -1; if (query(E) == 1) { ret[i] = c; break; } } return ret; } if (M == N * (N-1) / 2) { FOR(i, 0, N-1) { int lo = 0, hi = N-1; while (lo < hi) { const int mid = lo + hi >> 1; vt<int> E(N); E[i] = -1; int cur = 0; FOR(j, 0, N-1) if (j != i) E[j] = min(cur++, mid); if (query(E) > mid + 1) lo = mid + 1; else hi = mid; } ret[i] = lo; } return ret; } const int O = query(vt<int>(N, -1)); int L = 0; vt<int> dif(N); FOR(i, 1, N-1) { vt<int> E(N, -1); FOR(j, L, i-1) E[j] = N; if (query(E) == O) L = i, dif[i] = 1; dif[i] += dif[i-1]; } return dif; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...