제출 #1128888

#제출 시각아이디문제언어결과실행 시간메모리
1128888vladiliusSuper Dango Maker (JOI22_dango3)C++20
7 / 100
2595 ms804 KiB
#include <bits/stdc++.h> #include "dango3.h" using namespace std; using ll = long long; using pii = pair<int, int>; #define pb push_back #define ff first #define ss second void Solve(int n, int m){ vector<int> A; for (int i = 0; i <= n * m; i++) A.pb(i); vector<int> a, p, b; int tt = m, i = 1; while (tt--){ auto check1 = [&](int k){ vector<int> a1 = a; for (int j = i; j <= k; j++){ a1.pb(A[j]); } return Query(a1) < 1; }; int l1 = i - 1, r1 = n * m; while (l1 + 1 < r1){ int k = (l1 + r1) / 2; if (check1(k)){ l1 = k; } else { r1 = k - 1; } } while (check1(l1)) l1++; while (i <= l1) a.pb(A[i++]); p.clear(); b = a; int TT = n, st = 0; while (TT--){ bool ind = 0; for (int d = 0; d < 5; d++){ vector<int> a1 = a; a1.erase(find(a1.begin(), a1.end(), b[st])); if (Query(a1) < 1){ ind = 1; st++; break; } a = a1; p.pb(b[st++]); } if (ind) continue; auto check = [&](int k){ vector<int> a1 = a; for (int f = st; f <= k; f++){ a1.erase(find(a1.begin(), a1.end(), b[f])); } return Query(a1) < 1; }; int l = st - 1, r = (int) b.size() - n; while (l + 1 < r){ int k = (l + r) / 2; if (check(k)){ r = k - 1; } else { l = k; } } while (!check(l)) l++; for (int f = st; f < l; f++){ a.erase(find(a.begin(), a.end(), b[f])); p.pb(b[f]); } st = l + 1; } Answer(a); a = p; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...