제출 #937728

#제출 시각아이디문제언어결과실행 시간메모리
937728danikoynovScales (IOI15_scales)C++14
0 / 100
1 ms600 KiB
#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[4], w[3]);
    /**if (var == w[4])
    {
        res.push_back(w[0]);
        res.push_back(w[1]);
        int nv = getNextLightest(w[3], w[4], w[5], w[2]);
        if (nv == w[4])
        {
            res.push_back(w[3]);
            res.push_back(w[2]);
            res.push_back(w[4]);
            res.push_back(w[5]);
        }
        else
        if (nv == w[5])
        {
            res.push_back(w[3]);
            res.push_back(w[4]);
            res.push_back(w[2]);
            res.push_back(w[5]);
        }
        else
        {
            int al = getLightest(w[3], w[4], w[2]);
            if (al == w[2])
            {
                res.push_back(w[2]);
                res.push_back(w[3]);
                res.push_back(w[4]);
                res.push_back(w[5]);
            }
            else
            {
                res.push_back(w[3]);
                res.push_back(w[4]);
                res.push_back(w[5]);
                res.push_back(w[2]);
            }
        }
    }
    else*/
    {
        int lf = 0, rf = 3;

        int ch = getMedian(w[0], w[1], w[3]);
        int lightest;
        if (ch == w[1])
            lightest = w[0];
        else
            lightest = w[3];

        if (lightest == w[0])
            lf ++;
        else
            rf ++;
        res.push_back(lightest);
        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) 메시지

scales.cpp: In function 'void init(int)':
scales.cpp:6:15: warning: unused parameter 'T' [-Wunused-parameter]
    6 | void init(int T)
      |           ~~~~^
scales.cpp: In function 'void merge_sort(int*)':
scales.cpp:151:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  151 |     for (int i = 0; i < res.size(); i ++)
      |                     ~~^~~~~~~~~~~~
scales.cpp:34:9: warning: unused variable 'var' [-Wunused-variable]
   34 |     int var =getNextLightest(w[0], w[1], w[4], w[3]);
      |         ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...