제출 #523281

#제출 시각아이디문제언어결과실행 시간메모리
523281valerikkMinerals (JOI19_minerals)C++17
40 / 100
40 ms3228 KiB
#include "minerals.h" #include <iostream> #include <vector> #include <algorithm> #include <cassert> using namespace std; void Solve(int N) { vector<int> a, b; int lst = 0; for (int i = 1; i <= 2 * N; ++i) { int x = Query(i); if (x != lst) { lst = x; a.push_back(i); } else { Query(i); b.push_back(i); } } for (int i : a) { lst = Query(i); } vector<int> l(N, 0), r(N, N); for (int it = 0; it < 16; ++it) { vector<int> m(N); vector<vector<int>> here(N + 1); bool ok = true; for (int i = 0; i < N; ++i) { if (r[i] - l[i] != 1) { m[i] = (l[i] + r[i]) / 2; here[m[i]].push_back(i); ok = false; } } if (ok) break; if (it & 1) { for (int i = N; i >= 0; --i) { for (int j : here[i]) { int x = Query(b[j]); if (x == lst) { r[j] = m[j]; } else { l[j] = m[j]; } lst = x; } if (i != 0) lst = Query(a[i - 1]); } } else { for (int i = 0; i <= N; ++i) { for (int j : here[i]) { int x = Query(b[j]); if (x == lst) { r[j] = m[j]; } else { l[j] = m[j]; } lst = x; } if (i != N) lst = Query(a[i]); } } } for (int i = 0; i < N; ++i) { Answer(a[l[i]], b[i]); } }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...