Submission #1236083

#TimeUsernameProblemLanguageResultExecution timeMemory
1236083NurislamScales (IOI15_scales)C++20
71.43 / 100
860 ms584 KiB
#include "scales.h" #include <bits/stdc++.h> using namespace std; int inf = 100; vector<vector<int>> pr; vector<pair<int,vector<int>> > op; void init(int T){ /* function<int(int, vector<vector<int>>) > rec = [&](int ps, vector<vector<int>> left) { if(ps == 6 && left.size() == 1) return 0; if(ps == 6 && left.size() != 1) return inf; for(int i = 0; i < op.size(); i ++ ) { if(us[i] == 1) continue; us[i] = 1; vector<vector<vector<int>>> ans(7); for(auto & i : left) { if() }; }; }; */ }; int gl(vector<int> r) { //cout << "L: " << r[0] << ' ' << r[1] << ' ' << r[2] << '\n'; return getLightest(r[0], r[1], r[2]); }; int gh(vector<int> r) { //cout << "H: " << r[0] << ' ' << r[1] << ' ' << r[2] << '\n'; return getHeaviest(r[0], r[1], r[2]); }; int gm(vector<int> r) { //cout << "M: " << r[0] << ' ' << r[1] << ' ' << r[2] << '\n'; return getMedian(r[0], r[1], r[2]); }; int gn(vector<int> r) { return getNextLightest(r[0], r[1], r[2], r[3]); }; void as(vector<int> ans) { int a[6]; for(int i = 0; i < 6; i ++ ) a[i] = ans[i]; answer(a); }; void orderCoins() { vector<int> p(6); iota(p.begin(), p.end(), 1); set< pair<int,vector<int>> > op2; do { pr.push_back(p); vector<int> a; for(int i = 1; i < 4; i ++ ) a.push_back(p[i]); sort(a.begin(), a.end()); //for(int &i : a)i--; //op2.insert({0, {p[0], a[0], a[1], a[2]}}); op2.insert({1, a}); op2.insert({2, a}); op2.insert({3, a}); }while(next_permutation(p.begin(),p.end())); for(auto x : op2)op.push_back(x); vector<int> us(op.size()); while(pr.size() > 1) { int mx = pr.size(); int ans; for(int i = 0; i < (int)op.size(); i ++ ) { if(us[i])continue; auto &o = op[i]; int a = 0, b = 0, c = 0; for( auto p : pr){ vector<int> r; for(int j : p) { if(j == o.second[0] || j == o.second[1] || j == o.second[2]) r.push_back(j); }; if(o.first == 1) { if(r[0] == o.second[0]) a ++ ; if(r[0] == o.second[1]) b ++ ; if(r[0] == o.second[2]) c ++ ; }; if(o.first == 2) { if(r[2] == o.second[0]) a ++ ; if(r[2] == o.second[1]) b ++ ; if(r[2] == o.second[2]) c ++ ; }; if(o.first == 3) { if(r[1] == o.second[0]) a ++ ; if(r[1] == o.second[1]) b ++ ; if(r[1] == o.second[2]) c ++ ; }; //if(o.first == 1){ //if(p[o.second[0]] < p[o.second[1]] and p[o.second[0]] < p[o.second[2]]) //a++; //else if(p[o.second[1]] < p[o.second[2]]) //b++; //else //c++; //} //if(o.first == 2) { //if(p[o.second[0]] > p[o.second[1]] and p[o.second[0]] > p[o.second[2]]) //a++; //else if(p[o.second[1]] > p[o.second[2]]) //b++; //else //c++; //} //if(o.first == 3) { //if((p[o.second[0]] > p[o.second[1]] and p[o.second[0]] < p[o.second[2]]) or (p[o.second[0]] > p[o.second[2]] and p[o.second[0]] < p[o.second[1]])) //a++; //else if((p[o.second[1]] > p[o.second[0]] and p[o.second[1]] < p[o.second[2]]) or (p[o.second[1]] > p[o.second[2]] and p[o.second[1]] < p[o.second[0]])) //b++; //else //c++; //}; } if(mx > max(a, max(b,c))){ mx = max(a, max(b,c)); ans = i; } } if(op[ans].first == 1){ int q = gl(op[ans].second); vector<vector<int>> np; for(auto i : pr) { vector<int> r; for(int j : i) { if(j == op[ans].second[0] || j == op[ans].second[1] || j == op[ans].second[2]) r.push_back(j); }; if(r[0] == q) { np.push_back(i); }; }; pr = np; } if(op[ans].first == 2){ int q = gh(op[ans].second); vector<vector<int>> np; for(auto i : pr) { vector<int> r; for(int j : i) { if(j == op[ans].second[0] || j == op[ans].second[1] || j == op[ans].second[2]) r.push_back(j); }; if(r[2] == q) { np.push_back(i); }; } pr = np; } if(op[ans].first == 3){ int q = gm(op[ans].second); vector<vector<int>> np; for(auto i : pr){ vector<int> r; for(int j : i) { if(j == op[ans].second[0] || j == op[ans].second[1] || j == op[ans].second[2]) r.push_back(j); }; if(r[1] == q) { np.push_back(i); }; } pr = np; } //cout << pr.size() << '\n'; us[ans] = 1; } as(pr[0]); };
#Verdict Execution timeMemoryGrader output
Fetching results...