제출 #1307941

#제출 시각아이디문제언어결과실행 시간메모리
1307941ayaz동굴 (IOI13_cave)C++20
0 / 100
182 ms560 KiB
#include <bits/stdc++.h> #include "cave.h" using namespace std; #define all(x) (x).begin(), (x).end() #define isz(x) int(x.size()) using vi = vector<int>; using ll = long long; using pii = pair<int, int>; const int inf = 1e9; const int sz = 2e5; vi s, d; int* convert(vector<int>& v) { return v.data(); } int x; int ask(vi s) { int S[isz(s)]; for (int i = 0; i < isz(s); i++) S[i] = s[i]; return tryCombination(S); } int solve(int l, int r, int c) { if (l == r) return l; int mid = (l + r) / 2; for (int i = l; i <= mid; i++) { if (d[i] != inf) continue; s[i] = c; } for (int i = mid + 1; i <= r; i++) { if (d[i] != inf) continue; s[i] = (c ^ 1); } // cout << "l and r : " << l << " " << r << endl; // for (int i = 0; i < isz(s); i++) cout << s[i] << " "; // cout << endl; int sm = ask(s); // cout << "aks(s) : " << sm << '\n'; if (sm > x || sm == -1) { return solve(l, mid, c); } else return solve(mid + 1, r, c); } void exploreCave(int N) { int n = N; d.resize(n, inf); s.assign(n, 0); while (ask(s) != -1) { int idx = ask(s); x = idx; vi S = s; auto val = solve(0, n - 1, 1); s = S; s[val] = 1; d[val] = idx; } s.assign(n, 1); while (ask(s) != -1) { int idx = ask(s); x = idx; vi S = s; auto val = solve(0, n - 1, 0); s = S; s[val] = 0; d[val] = idx; } answer(convert(s), convert(d)); }
#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...