제출 #411504

#제출 시각아이디문제언어결과실행 시간메모리
411504Mlxa동굴 (IOI13_cave)C++17
63 / 100
1025 ms504 KiB
#include "cave.h" #include <bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() #define mp make_pair #define mt make_tuple #define x first #define y second const int N = 5024; int n; int s[N]; int d[N]; bitset<N> can, an; int query() { int t = tryCombination(s); return t == -1 ? n : t; } void exploreCave(int nn) { n = nn; fill_n(d, N, -1); for (int i = 0; i < n; ++i) { vector<int> f; can.reset(); for (int j = 0; j < n; ++j) { if (d[j] == -1) { f.push_back(j); can.set(j); } } int q = query(); for (int it = 0; can.count() > 5; ++it) { // cout << can.size() << endl; vector<int> vec; an.reset(); for (int j = 0; j < (int)f.size(); ++j) { int e = f[j]; if ((j >> it) & 1) { vec.push_back(e); an.set(e); s[e] ^= 1; } } int t = query(); for (int e : vec) { s[e] ^= 1; } assert(q >= i && t >= i); if ((q == i) == (t == i)) { can &= ~an; } else { can &= an; } } for (int j = 0; j < n; ++j) { if (!can.test(j)) { continue; } s[j] ^= 1; int t = query(); if ((q == i) == (t == i)) { continue; } d[j] = i; if (t == i) { s[j] ^= 1; } break; } // assert(query() > i); } answer(s, d); } #ifdef LC #include "graderlib.c" int main() { N = init(); exploreCave(N); printf("INCORRECT\nYour solution did not call answer().\n"); return 0; } #endif
#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...