답안 #568846

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
568846 2022-05-26T09:14:46 Z maomao90 Super Dango Maker (JOI22_dango3) C++17
100 / 100
1222 ms 940 KB
// Hallelujah, praise the one who set me free
// Hallelujah, death has lost its grip on me
// You have broken every chain, There's salvation in your name
// Jesus Christ, my living hope
#include <bits/stdc++.h> 
#include "dango3.h"
using namespace std;

template <class T>
inline bool mnto(T& a, T b) {return a > b ? a = b, 1 : 0;}
template <class T>
inline bool mxto(T& a, T b) {return a < b ? a = b, 1: 0;}
#define REP(i, s, e) for (int i = s; i < e; i++)
#define RREP(i, s, e) for (int i = s; i >= e; i--)
typedef long long ll;
typedef long double ld;
#define FI first
#define SE second
typedef pair<int, int> ii;
typedef pair<ll, ll> pll;
typedef tuple<int, int, int> iii;
#define ALL(_a) _a.begin(), _a.end()
#define SZ(_a) (int) _a.size()
#define pb push_back
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<ii> vii;
typedef vector<iii> viii;

#ifndef DEBUG
#define cerr if (0) cerr
#endif

const int INF = 1000000005;
const ll LINF = 1000000000000000005ll;
const int MAXN = 400;
const int MAXM = 25;

namespace {
    int n, m;
    void solve(vi id, int m) {
        if (SZ(id) == n) {
            Answer(id);
            return;
        }
        int nm = m / 2;
        vi pref, suf;
        for (int i : id) {
            pref.pb(i);
        }
        reverse(ALL(id));
        vi lv, rv;
        for (int i : id) {
            pref.pop_back();
            vi vec;
            for (int j : pref) {
                vec.pb(j);
            }
            for (int j : suf) {
                vec.pb(j);
            }
            if (Query(vec) >= nm) {
                rv.pb(i);
            } else {
                suf.pb(i);
                lv.pb(i);
            }
        }
        solve(lv, nm);
        solve(rv, m - nm);
    }
}

void Solve(int N, int M) {
    n = N; m = M;
    vi id(n * m, 0);
    iota(ALL(id), 1);
    solve(id, m);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 12 ms 340 KB Output is correct
2 Correct 12 ms 340 KB Output is correct
3 Correct 14 ms 304 KB Output is correct
4 Correct 14 ms 396 KB Output is correct
5 Correct 11 ms 340 KB Output is correct
6 Correct 12 ms 380 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 269 ms 532 KB Output is correct
2 Correct 265 ms 596 KB Output is correct
3 Correct 309 ms 532 KB Output is correct
4 Correct 310 ms 596 KB Output is correct
5 Correct 256 ms 532 KB Output is correct
6 Correct 262 ms 660 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1043 ms 800 KB Output is correct
2 Correct 1054 ms 932 KB Output is correct
3 Correct 1212 ms 900 KB Output is correct
4 Correct 1222 ms 712 KB Output is correct
5 Correct 972 ms 804 KB Output is correct
6 Correct 996 ms 940 KB Output is correct