제출 #1242188

#제출 시각아이디문제언어결과실행 시간메모리
1242188kussiaScales (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...