제출 #1227901

#제출 시각아이디문제언어결과실행 시간메모리
1227901jasonicMonster Game (JOI21_monster)C++20
0 / 100
28 ms484 KiB
#include "monster.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define fastIO cin.tie(0); ios::sync_with_stdio(false) mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); vector<int> dnc(vector<int> idcs, int lb, int rb) { if(idcs.size() <= 1) return idcs; if(idcs.size() == 2) { if(! Query(idcs[0], idcs[1])) { // 0 is less than swap(idcs[0], idcs[1]); } return idcs; } if(idcs.size() == 3) { bool x, y, z; vector<int> res, rest; if(lb != -1) { x = Query(idcs[0], lb); y = Query(idcs[1], lb); z = Query(idcs[2], lb); if(x == 0) { res.push_back(idcs[0]); rest = dnc({idcs[1], idcs[2]}, idcs[0], rb); res.insert(res.end(), rest.begin(), rest.end()); } else if(y == 0) { res.push_back(idcs[1]); rest = dnc({idcs[0], idcs[2]}, idcs[1], rb); res.insert(res.end(), rest.begin(), rest.end()); } else { res.push_back(idcs[2]); rest = dnc({idcs[1], idcs[2]}, idcs[2], rb); res.insert(res.end(), rest.begin(), rest.end()); } } else { x = Query(idcs[0], rb); y = Query(idcs[1], rb); z = Query(idcs[2], rb); if(x == 1) { rest = dnc({idcs[1], idcs[2]}, idcs[0], rb); res.insert(res.end(), rest.begin(), rest.end()); res.push_back(idcs[0]); } else if(y == 1) { rest = dnc({idcs[0], idcs[2]}, idcs[1], rb); res.insert(res.end(), rest.begin(), rest.end()); res.push_back(idcs[1]); } else { rest = dnc({idcs[1], idcs[2]}, idcs[2], rb); res.insert(res.end(), rest.begin(), rest.end()); res.push_back(idcs[2]); } } return res; } // int rand = rng(); // int pivot = abs(rand)%idcs.size(); int pivot = idcs.size()-1; vector<int> la, ra; int ls, rs; ls = rs = 0; for(int i = 0; i < idcs.size(); i++) { if(i == pivot) continue; if(Query(idcs[pivot], idcs[i])) { la.push_back(idcs[i]); ls++; } else { rs++; ra.push_back(idcs[i]); } } // cerr << ls << ' ' << rs << '\n'; if(min(ls, rs) == 1) { if(ls == 1) { bool wrong = 0; for(auto i : ra) wrong ^= Query(la[0], i); if(wrong) { la.insert(la.end(), ra.begin(), ra.end()); swap(la, ra); la = vector<int>(); } } else { bool wrong = 0; for(auto i : la) wrong ^= Query(i, ra[0]); if(wrong) { la.insert(la.end(), ra.begin(), ra.end()); ra = vector<int>(); } } } // printf("idcs: "); for(auto &i : idcs) cout << i << ' '; cout << '\n'; // printf("pivot: idcs[%d] = %d\n", pivot, idcs[pivot]); // printf("left arr: "); for(auto &i : la) cout << i << ' '; cout << '\n'; // printf("rigt arr: "); for(auto &i : ra) cout << i << ' '; cout << '\n'; la = dnc(la, lb, idcs[pivot]); ra = dnc(ra, idcs[pivot], rb); vector<int> ans; ans.insert(ans.end(), la.begin(), la.end()); ans.push_back(idcs[pivot]); ans.insert(ans.end(), ra.begin(), ra.end()); // printf("became: "); for(auto i : ans) cout << i << ' '; cout << '\n'; return ans; } vector<int> Solve(int n) { vector<int> arr; for(int i = 0; i < n; i++) arr.push_back(i); vector<int> ans1 = dnc(arr, -1, n); vector<int> ans2(n); for(int i = 0; i < n; i++) ans2[ans1[i]] = i; return ans2; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...