제출 #892316

#제출 시각아이디문제언어결과실행 시간메모리
892316vjudge1Super Dango Maker (JOI22_dango3)C++17
22 / 100
220 ms764 KiB
#include <bits/stdc++.h> #include "dango3.h" using namespace std; #define all(x) x.begin(), x.end() #define ar array #define pb push_back #define ln '\n' //#define int long long using i64 = long long; template <class F, class _S> bool chmin(F &u, const _S &v){ bool flag = false; if ( u > v ){ u = v; flag |= true; } return flag; } template <class F, class _S> bool chmax(F &u, const _S &v){ bool flag = false; if ( u < v ){ u = v; flag |= true; } return flag; } void Solve(int n, int m){ vector <int> p, us(n * m + 1); for ( int i = 1; i <= n * m; i++ ){ p.pb(i); } auto nxt = [&](){ vector <int> a; for ( int i = 1; i <= n * m; i++ ){ if ( !us[i] ){ a.pb(i); } } swap(p, a); }; for ( int op = 1; op <= m; op++ ){ auto get = [&](int lst){ int l = 0, r = lst; while ( l < r ){ int md = (l + r) >> 1; vector <int> q; for ( int i = 0; i <= md; i++ ){ q.pb(p[i]); } if ( Query(q) < 2 ){ l = md + 1; } else r = md; } return l; }; auto dfs = [&](auto dfs, int lst, auto &cur) -> void{ if ( lst == -1 ){ return; } int l = 0, r = lst; while ( l < r ){ int md = (l + r) >> 1; auto q = cur; for ( int i = 0; i <= md; i++ ){ q.pb(p[i]); } if ( Query(q) ) r = md; else l = md + 1; } us[p[l]] = true; cur.pb(p[l]); dfs(dfs, l - 1, cur); }; vector <int> tmp; if ( op == m ){ Answer(p); } else{ int s = p.size(), ps = get(s - 1); dfs(dfs, ps, tmp); Answer(tmp); tmp.clear(); nxt(); dfs(dfs, ps - n, tmp); Answer(tmp); nxt(); op++; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...