# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
604369 | cheissmart | 저울 (IOI15_scales) | C++14 | 1 ms | 212 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "scales.h"
#include <bits/stdc++.h>
#define F first
#define S second
#define V vector
#define PB push_back
#define EB emplace_back
#define MP make_pair
#define SZ(v) int((v).size())
#define ALL(v) (v).begin(), (v).end()
using namespace std;
typedef long long ll;
typedef pair<int, int> pi;
typedef V<int> vi;
const int INF = 1e9 + 7;
void init(int T) {
}
void orderCoins() {
vi ans(6); iota(ALL(ans), 1);
auto go = [&] (int x, int y, int z) {
int a = ans[x], b = ans[y], c = ans[z];
int mx = getHeaviest(a, b, c);
int mn = getLightest(a, b, c);
int md = a ^ b ^ c ^ mx ^ mn;
ans[x] = mn, ans[y] = md, ans[z] = mx;
};
auto go1 = [&] (int x, int y, int z) { // ans[x] < ans[y]
int a = ans[x], b = ans[y], c = ans[z];
int md = getMedian(a, b, c);
if(md == a) ans[x] = c, ans[y] = a, ans[z] = b;
else if(md == c) ans[x] = a, ans[y] = c, ans[z] = b;
};
auto go2 = [&] (int x, int y, int z) { // ans[y] < ans[z]
int a = ans[x], b = ans[y], c = ans[z];
int md = getMedian(a, b, c);
if(md == a) ans[x] = b, ans[y] = a, ans[z] = c;
else if(md == c) ans[x] = b, ans[y] = c, ans[z] = a;
};
go(0, 1, 2);
go1(1, 2, 3);
go2(0, 1, 2);
{
// insert 4
int tt = getNextLightest(ans[0], ans[1], ans[2], ans[4]);
int val = ans[4];
ans.erase(ans.begin() + 4);
if(tt == ans[1]) {
ans.insert(ans.begin() + 1, val);
} else if(tt == ans[2]) {
ans.insert(ans.begin() + 2, val);
} else {
int md = getMedian(ans[0], ans[3], val);
if(md == ans[0])
ans.insert(ans.begin(), val);
else if(md == ans[3]) ans.insert(ans.begin() + 4, val);
else ans.insert(ans.begin() + 3, val);
}
}
{
// insert 5
int tt = getNextLightest(ans[2], ans[3], ans[4], ans[5]);
int val = ans[5];
ans.erase(ans.begin() + 5);
if(tt == ans[3]) {
ans.insert(ans.begin() + 3, val);
} else if(tt == ans[4]) {
ans.insert(ans.begin() + 4, val);
} else {
int ttt = getNextLightest(ans[0], ans[1], ans[2], val);
if(ttt == ans[1]) {
ans.insert(ans.begin() + 1, val);
} else if(ttt == ans[2]) {
ans.insert(ans.begin() + 2, val);
} else {
if(getLightest(ans[0], ans[4], val) == val)
ans.insert(ans.begin(), val);
else
ans.insert(ans.begin() + 5, val);
}
}
}
int W[] = {ans[0], ans[1], ans[2], ans[3], ans[4], ans[5]};
answer(W);
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |