제출 #619867

#제출 시각아이디문제언어결과실행 시간메모리
619867yanndev저울 (IOI15_scales)C++17
18.86 / 100
1 ms296 KiB
#include "scales.h"
#include <bits/stdc++.h>
using namespace std;

mt19937 rng(69420);
int mx = -1;
map<pair<int, int>, bool> comp {};

void init(int T) {
    /* ... */
}

bool comp1(int a, int b) {
    if (a == b)
        return false;
    if (comp.find({a, b}) != comp.end())
        return comp[{a, b}];
        
    int c = a;
    while (c == a || c == b)
        c = (rng() % 6) + 1;
    
    int small = getLightest(a, b, c);
    int big = getHeaviest(a, b, c);

    vector<int> ls {a, b, c};
    for (auto& x: ls) {
        if (x != small) {
            comp[{small, x}] = true;
            comp[{x, small}] = false;
        }

        if (x != big) {
            comp[{x, big}] = true;
            comp[{big, x}] = false;
        }
    }

    if (b == big || a == small) {
        comp[{a, b}] = comp[{b, a}] = true;
        return true;
    }
    if (b == small || a == big) {
        comp[{a, b}] = comp[{b, a}] = false;
        return false;
    }
    return false;
}

bool comp2(int a, int b) {
    if (a == b)
        return false;
    if (comp.find({a, b}) != comp.end())
        return comp[{a, b}];
    if (b == mx) {
        comp[{a, b}] = true;
        comp[{b, a}] = false;
        return true;
    }
    if (a == mx) {
        comp[{a, b}] = false;
        comp[{b, a}] = true;
        return false;
    }

    int small = getLightest(a, b, mx);
    comp[{a, b}] = comp[{b, a}] = small == a;
    return small == a;
}

void orderCoins() {
    /* ... */
    int W[] = {1, 2, 3, 4, 5, 6};
    comp.clear();

    /*vector<int> cur {};
    for (int i = 1; i <= 6; i++) {
        if ((int)cur.size() < 3) {
            cur.push_back(i);
        }

        if ((int)cur.size() == 3) {
            mx = getHeaviest(cur[0], cur[1], cur[2]);
            cur = {mx};
        }
    }

    if ((int)cur.size() > 1) {
        for (int i = 1; (int)cur.size() < 3 && i <= 6; i++) {
            if (find(cur.begin(), cur.end(), i) == cur.end()) {
                cur.push_back(i);
            }
        }
        
        mx = getHeaviest(cur[0], cur[1], cur[2]);
    }*/

    //cout << "mx is " << mx << '\n';

    stable_sort(W, W + 6, comp1);
    answer(W);
}

컴파일 시 표준 에러 (stderr) 메시지

scales.cpp: In function 'void init(int)':
scales.cpp:9:15: warning: unused parameter 'T' [-Wunused-parameter]
    9 | void init(int T) {
      |           ~~~~^
scales.cpp: In function 'bool comp1(int, int)':
scales.cpp:21:25: warning: conversion from 'std::mersenne_twister_engine<long unsigned int, 32, 624, 397, 31, 2567483615, 11, 4294967295, 7, 2636928640, 15, 4022730752, 18, 1812433253>::result_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
   21 |         c = (rng() % 6) + 1;
      |             ~~~~~~~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...