# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
520330 | silverfish | 저울 (IOI15_scales) | C++17 | 2 ms | 332 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "scales.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
const int INF = 1000;
int ind[6];
map<int, int[6]> ans;
int nextl(int A, int B, int C, int D) {
int allLess = 1;
A--; B--; C--; D--;
if (ind[A] > ind[D] || ind[B] > ind[D] || ind[C] > ind[D])
allLess = 0;
if (allLess == 1) {
if (ind[A] < ind[B] && ind[A] < ind[C])
return A + 1;
if (ind[B] < ind[A] && ind[B] < ind[C])
return B + 1;
return C + 1;
}
if (ind[A] > ind[D]) {
if ((ind[A] < ind[B] || ind[B] < ind[D]) && (ind[A] < ind[C] || ind[C] < ind[D]))
return A + 1;
}
if (ind[B] > ind[D]) {
if ((ind[B] < ind[A] || ind[A] < ind[D]) && (ind[B] < ind[C] || ind[C] < ind[D]))
return B + 1;
}
return C + 1;
}
int mid(int A, int B, int C) {
A--; B--; C--;
if (ind[B] < ind[A] && ind[A] < ind[C])
return A + 1;
if (ind[C] < ind[A] && ind[A] < ind[B])
return A + 1;
if (ind[A] < ind[B] && ind[B] < ind[C])
return B + 1;
if (ind[C] < ind[B] && ind[B] < ind[A])
return B + 1;
return C + 1;
}
int heavy(int A, int B, int C) {
A--; B--; C--;
if (ind[A] > ind[B] && ind[A] > ind[C])
return A + 1;
if (ind[B] > ind[A] && ind[B] > ind[C])
return B + 1;
return C + 1;
}
int light(int A, int B, int C) {
A--; B--; C--;
if (ind[A] < ind[B] && ind[A] < ind[C])
return A + 1;
if (ind[B] < ind[A] && ind[B] < ind[C])
return B + 1;
return C + 1;
}
void init(int T) {
vector<int> p = {1, 2, 3, 4, 5, 6};
map<int,int> cnt;
do{
for(int i = 0; i < 6; ++i) ind[p[i]-1] = i;
vector<int> q;
q.pb(nextl(6,5,1,2));
q.pb(nextl(5,4,6,1));
q.pb(nextl(5,6,2,4));
q.pb(nextl(6,2,1,3));
q.pb(nextl(5,6,4,3));
q.pb(mid(1,2,3));
q.pb(mid(4,5,6));
q.pb(mid(3,4,5));
reverse(q.begin(), q.end());
int mul = 1, cur = 0;
for(int x : q){
cur += mul*x;
mul *= 10;
}
int v = 0;
mul = 1;
for(int i = 0; i < 6; ++i){
ans[cur][i] = p[i];
}
++cnt[cur];
}while(next_permutation(p.begin(), p.end()));
int mx = 0, mxpos;
for(auto [x,c] : cnt){
if(c > mx){
mx = c;
mxpos = x;
}
}
// cout << mx << ' ' << mxpos << '\n';
return;
}
void orderCoins() {
vector<int> q;
q.pb(getNextLightest(6,5,1,2));
q.pb(getNextLightest(5,4,6,1));
q.pb(getNextLightest(5,6,2,4));
q.pb(getNextLightest(6,2,1,3));
q.pb(getNextLightest(5,6,4,3));
q.pb(getMedian(1,2,3));
q.pb(getMedian(4,5,6));
q.pb(getMedian(3,4,5));
reverse(q.begin(), q.end());
int mul = 1, cur = 0;
for(int x : q){
cur += mul*x;
mul *= 10;
}
//cout << cur << '\n';
for(int i = 0; i < 6; ++i) cout << ans[cur][i] << ' ';
cout << '\n';
answer(ans[cur]);
return;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |