Submission #945063

#TimeUsernameProblemLanguageResultExecution timeMemory
945063alextodoranSuper Dango Maker (JOI22_dango3)C++17
7 / 100
204 ms656 KiB
/** _ _ __ _ _ _ _ _ _ |a ||t ||o d | |o | | __ _| | _ | __| _ | | __ |/_ | __ /__\ / _\| **/ #include <bits/stdc++.h> #include "dango3.h" using namespace std; typedef long long ll; int Query (const vector <int> &x); void Answer (const vector <int> &a); void Solve (int N, int M) { int A[N * M + 2]; fill(A + 1, A + N * M + 1, 0); int l = 1, r = N * M; while (l < r) { int mid = (l + r) / 2; vector <int> x; for (int i = 1; i <= mid; i++) { x.push_back(i); } if (Query(x) > 0) { r = mid; } else { l = mid + 1; } } bool in[N * M + 2]; fill(in + 1, in + N * M + 1, false); for (int i = 1; i <= l; i++) { in[i] = true; } vector <int> group; for (int i = N * M; i >= 1; i--) { if (in[i] == true) { in[i] = false; vector <int> x; for (int j = 1; j <= N * M; j++) { if (in[j] == true) { x.push_back(j); } } if (Query(x) == 0) { in[i] = true; } } } for (int i = 1; i <= N * M; i++) { if (in[i] == true) { group.push_back(i); A[i] = (int) group.size(); } } for (int k : group) { deque <int> unknown; for (int i = k + 1; i <= N * M; i++) { if (A[i] == 0) { unknown.push_back(i); } } while (unknown.empty() == false) { int l = 0, r = (int) unknown.size(); while (l < r) { int mid = (l + r) / 2; vector <int> x; for (int i = 0; i <= mid; i++) { x.push_back(unknown[i]); } for (int i : group) { if (A[i] != A[k]) { x.push_back(i); } } if (Query(x) > 0) { r = mid; } else { l = mid + 1; } } if (l == (int) unknown.size()) { break; } A[unknown[l]] = A[k]; k = unknown[l]; while (unknown.empty() == false && unknown.front() <= k) { unknown.pop_front(); } } } vector <int> of_color[N + 2]; for (int i = 1; i <= N * M; i++) { of_color[A[i]].push_back(i); } for (int t = 1; t <= M; t++) { vector <int> a; for (int c = 1; c <= N; c++) { a.push_back(of_color[c].back()); of_color[c].pop_back(); } Answer(a); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...