Submission #945076

#TimeUsernameProblemLanguageResultExecution timeMemory
945076alextodoranSuper Dango Maker (JOI22_dango3)C++17
22 / 100
2005 ms848 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 i = 1; i <= N * M; i++) { if (A[i] == 0) { int l = 1, r = N; while (l < r) { int mid = (l + r) / 2; vector <int> x; for (int j = 1; j <= N * M; j++) { if ((in[j] == false || A[j] <= mid) && j != i) { x.push_back(j); } } if (Query(x) == M - 1) { r = mid; } else { l = mid + 1; } } A[i] = l; } } 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...