# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
937740 | danikoynov | Scales (IOI15_scales) | C++14 | 1 ms | 348 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "scales.h"
#include<bits/stdc++.h>
using namespace std;
void init(int T)
{
/* ... */
}
void sort_range(int l, int r, int w[])
{
int a = w[l], b = w[l + 1], c = w[r];
///cout << "sort range " << a << " " << b << " " << c << endl;
int mid = getMedian(a, b, c);
int low = getLightest(a, b, c);
int high = a;
if (low == a || mid == a)
{
high = b;
if (mid == b || low == b)
high = c;
}
w[l] = low;
w[l + 1] = mid;
w[r] = high;
}
void merge_sort(int w[])
{
vector < int > res;
int var =getNextLightest(w[0], w[1], w[2], w[4]);
if (var == w[1])
{
res.push_back(w[0]);
res.push_back(w[4]);
res.push_back(w[1]);
res.push_back(w[2]);
int mid = getMedian(w[0], w[4], w[3]);
if (mid == w[0])
res.insert(res.begin() + 0, w[3]);
else
res.insert(res.begin() + 1, w[3]);
mid = getMedian(w[1], w[2], w[5]);
if (mid == w[1])
{
res.insert(res.begin() + 2, w[5]);
}
else if (mid == w[5])
{
res.insert(res.begin() + 3, w[5]);
}
else if (mid == w[2])
{
res.insert(res.begin() + 4, w[5]);
}
}
else
{
int lf = 0, rf = 3;
int ch = getMedian(w[0], w[1], w[3]);
int lightest;
if (ch == w[1])
{
lightest = w[0];
res.push_back(w[0]);
res.push_back(w[1]);
lf += 2;
}
else if (ch == w[3])
{
lightest = w[0];
res.push_back(w[0]);
res.push_back(w[3]);
lf ++;
rf ++;
}
else
{
lightest = w[3];
res.push_back(w[3]);
rf ++;
}
while(lf <= 2 && rf <= 5 && (3 - lf + 6 - rf > 3))
{
if (getHeaviest(w[lf], w[rf], lightest) == w[lf])
res.push_back(w[rf ++]);
else
res.push_back(w[lf ++]);
}
if (rf > 5)
while(lf <= 2)
res.push_back(w[lf ++]);
if (lf > 5)
while(rf <= 5)
res.push_back(w[rf ++]);
if (lf == 1)
{
int mid = getMedian(w[lf], w[lf + 1], w[rf]);
if (mid == w[lf])
{
res.push_back(w[rf]);
res.push_back(w[lf]);
res.push_back(w[lf + 1]);
}
else if (mid == w[lf + 1])
{
res.push_back(w[lf]);
res.push_back(w[lf + 1]);
res.push_back(w[rf]);
}
else if (mid == w[rf])
{
res.push_back(w[lf]);
res.push_back(w[rf]);
res.push_back(w[lf + 1]);
}
}
else if (rf == 4)
{
int mid = getMedian(w[lf], w[rf], w[rf + 1]);
if (mid == w[rf])
{
res.push_back(w[lf]);
res.push_back(w[rf]);
res.push_back(w[rf + 1]);
}
else if (mid == w[rf + 1])
{
res.push_back(w[rf]);
res.push_back(w[rf + 1]);
res.push_back(w[lf]);
}
else if (mid == w[lf])
{
res.push_back(w[rf]);
res.push_back(w[lf]);
res.push_back(w[rf + 1]);
}
}
}
for (int i = 0; i < res.size(); i ++)
w[i] = res[i];
}
void orderCoins()
{
/* ... */
int W[] = {1, 2, 3, 4, 5, 6};
sort_range(0, 2, W);
sort_range(3, 5, W);
/**for (int i = 0; i < 6; i ++)
cout << W[i] << " ";
cout << endl;
exit(0);*/
merge_sort(W);
answer(W);
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |