제출 #1242188

#제출 시각아이디문제언어결과실행 시간메모리
1242188kussia저울 (IOI15_scales)C++20
55.56 / 100
1 ms328 KiB
#include <bits/stdc++.h> #include "scales.h" using namespace std; using ll = long long; //vector<int> arr = {1, 3, 4, 2, 5, 6}; //bool br = false; void init(int t) { } /*int getLightest(int a, int b, int c) { int mn = min({arr[a-1], arr[b-1], arr[c-1]}); if(mn == arr[a-1]) return a; else if(mn == arr[b-1]) return b; else return c; } int getHeaviest(int a, int b, int c) { int mn = max({arr[a-1], arr[b-1], arr[c-1]}); if(mn == arr[a-1]) return a; else if(mn == arr[b-1]) return b; else return c; } void answer(int arr1[]) { vector<int> pos(10); for(int i = 0; i < 6; i++) { cout << arr1[i] << ' '; pos[arr1[i]-1] = i+1; } cout << '\n'; for(int i = 0; i < 6; i++) { cout << pos[i] << ' '; } for(int i = 0; i < 6; i++) { cout << arr[i] << ' ' << pos[i] << '\n'; if(arr[i] != pos[i]) { br = true; return ; } } cout << '\n'; cout << '\n'; } */ void orderCoins() { vector<int> a = {1, 2, 3}, b = {4, 5, 6}; int mn = getLightest(1, 2, 3); int mn1 = getLightest(4, 5, 6); for(int i = 0; i < 3; i++) { if(a[i] == mn) a[i] = 1; } a[0] = mn; for(int i = 0; i < 3; i++) { if(b[i] == mn1) b[i] = 4; } b[0] = mn1; vector<int> ans = {getLightest(mn, mn1, a[1])}; if(ans[0] == mn) { int mn2 = getLightest(mn1, a[1], a[2]); ans.push_back(mn2); } else { int mn2 = getLightest(mn, b[1], b[2]); ans.push_back(mn2); } for(auto it : ans) { if(it <= 3) a.erase(find(a.begin(), a.end(), it)); else b.erase(find(b.begin(), b.end(), it)); } if(a.size() == 1) { mn = getLightest(a[0], b[0], b[1]); ans.push_back(mn); if(mn <= 3) a.erase(find(a.begin(), a.end(), mn)); else b.erase(find(b.begin(), b.end(), mn)); } else if(b.size() == 1) { mn = getLightest(b[0], a[0], a[1]); ans.push_back(mn); if(mn <= 3) a.erase(find(a.begin(), a.end(), mn)); else b.erase(find(b.begin(), b.end(), mn)); } else { mn = getHeaviest(a[0], a[1], b[0]); vector<int> now; for(auto it : a) { if(it != mn) now.push_back(it); } for(auto it : b) { if(it != mn) now.push_back(it); } mn = getLightest(now[0], now[1], now[2]); ans.push_back(mn); if(mn <= 3) a.erase(find(a.begin(), a.end(), mn)); else b.erase(find(b.begin(), b.end(), mn)); } vector<int> c; for(auto it : a) c.push_back(it); for(auto it : b) c.push_back(it); if(b.size() == 3) { int mx = getHeaviest(b[0], b[1], b[2]); ans.push_back(b[0]); b.erase(b.begin()); b.erase(find(b.begin(), b.end(), mx)); ans.push_back(b[0]); ans.push_back(mx); } else if(a.size() == 3) { int mx = getHeaviest(a[0], a[1], a[2]); ans.push_back(a[0]); a.erase(a.begin()); a.erase(find(a.begin(), a.end(), mx)); ans.push_back(a[0]); ans.push_back(mx); } else { int mn_now = getLightest(c[0], c[1], c[2]); int mx_now = getHeaviest(c[0], c[1], c[2]); ans.push_back(mn_now); c.erase(find(c.begin(), c.end(), mn_now)); c.erase(find(c.begin(), c.end(), mx_now)); ans.push_back(c[0]); ans.push_back(mx_now); } int ans1[] = {ans[0], ans[1], ans[2], ans[3], ans[4], ans[5]}; answer(ans1); }
#Verdict Execution timeMemoryGrader output
Fetching results...