제출 #420754

#제출 시각아이디문제언어결과실행 시간메모리
420754egorlifarMonster Game (JOI21_monster)C++17
0 / 100
3095 ms288 KiB
/* KAMUI! ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓██████████▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓███▓▓▓▓▓▓▓▓▓▓█████▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓███▓▒▒░▒▒▒▒▒░░░▒▒▒▓▓███▓▓▓▓▓▓▓ ▓▓▓▓▓▓█▓▒▒▒▓▓████████▓▒▒░▒▒▒▓██▓▓▓▓▓▓ ▓▓▓▓██▒▓████████████████▓░▒▒▒▒▓██▓▓▓▓ ▓▓▓██▓███████▓▒░░░░░░░▒███▒░░▒▒▒██▓▓▓ ▓▓█████████▓░░░░░░░░░░░░░██▓▓██████▓▓ ▓▓█▒▓███████████▓▓▒▒▒▓▓██████████▓█▓▓ ▓██▒▒▒███████████████████████████▓▓█▓ ▓█▓▒▒░░████████▒░░░░▓███████████▓░▒█▓ ▓█▒▒▒░██░▒████░░░░░░█████░░████▓░░▒█▓ ▓█▒▒▒▒██░░░██▓░░░░░░░███▒░░████▒▒▒▒█▓ ▓█▓▒▒▒██▒░░░▓█▓░░░░░▓█▓░░░▓███▓▒▒░▓█▓ ▓█▓▒▒▒███░░░░████████▓░░░░░████▒▒▒▓█▓ ▓▓█▒▒░▓███░░░▒███████▒░░░▒███▓▒▒▒▒█▓▓ ▓▓██▒▒░████▒░░███████░░░▓███▓░▒▒▒██▓▓ ▓▓▓██▒▒▒█████▓░░██████▒▓███▓▒░▒▒██▓▓▓ ▓▓▓▓██▓▒░▓██████████████▓▒░▒▒▒▓██▓▓▓▓ ▓▓▓▓▓▓██▓░▒▓█████████▒░░▒▒▒▒▓██▓▓▓▓▓▓ ▓▓▓▓▓▓▓███▓▒▒▓██████▓░▒▒▒▓▓███▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓███▓▓▓▓███▓▓▓████▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓███████████▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ */ #include "monster.h" #include <iostream> #include <complex> #include <vector> #include <string> #include <algorithm> #include <cstdio> #include <numeric> #include <cstring> #include <ctime> #include <cstdlib> #include <set> #include <map> #include <unordered_map> #include <unordered_set> #include <list> #include <cmath> #include <bitset> #include <cassert> #include <queue> #include <stack> #include <deque> #include <random> using namespace std; template<typename T1, typename T2> inline void chkmin(T1 &a, T2 b) {if (a > b) a = b;} template<typename T1, typename T2> inline void chkmax(T1 &a, T2 b) {if (a < b) a = b;} #define all(c) (c).begin(), (c).end() #define sz(c) (int)(c).size() #define left left228 #define right right228 #define y1 y1228 #define mp make_pair #define pb push_back #define y2 y2228 #define rank rank228 using ll = long long; using ld = long double; mt19937 as; vector<int> mysort(vector<int> cur) { if (sz(cur) <= 1) { return cur; } if (sz(cur) <= 8) { vector<int> sum(sz(cur)); vector<pair<int, int> > st; for (int i = 0; i < sz(cur); i++) { for (int j = i + 1; j < sz(cur); j++) { int f = Query(cur[i], cur[j]); sum[i] += f; sum[j] += 1 - f; } st.pb(mp(sum[i], cur[i])); } sort(all(st)); for (int i = sz(cur) - 2; i >= sz(cur) - 2; i--) { if (st[i].first == st[i + 1].first) { if (!Query(st[i + 1].second, st[i - 1].second) || !Query(st[i + 1].second, st[i - 2].second)) { swap(st[i], st[i + 1]); } } } for (int i = 0; i < 1; i++) { if (st[i].first == st[i + 1].first) { if (!Query(st[i + 1].second, st[i + 2].second)) { swap(st[i], st[i + 1]); } } } vector<int> res; for (auto x: st) { res.pb(x.second); } return res; } int f; vector<int> la, lb; while (true) { la.clear(); lb.clear(); f = cur[as() % sz(cur)]; for (int i = 0; i < sz(cur); i++) { if (cur[i] != f) { if (Query(f, cur[i])) { la.pb(f); } else { lb.pb(f); } } } if (sz(la) >= 4 && sz(lb) >= 4) { break; } } la = mysort(la); lb = mysort(lb); vector<int> st; for (int i = 0; i < sz(la) - 1; i++) { st.pb(la[i]); } st.pb(lb[0]); st.pb(f); st.pb(la.back()); for (int i = 1; i < sz(lb); i++) { st.pb(lb[i]); } return st; } vector<int> Solve(int N) { as.seed(228); vector<int> T(N); vector<int> order; for (int i = 0; i < N; i++) { order.pb(i); } auto f = mysort(order); for (int i = 0; i < N; i++) { T[f[i]] = i; } return T; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...