제출 #678896

#제출 시각아이디문제언어결과실행 시간메모리
678896Genius3435Detecting Molecules (IOI16_molecules)C++17
100 / 100
48 ms5580 KiB
#include <bits/stdc++.h>
using namespace std;
using u32 = uint32_t;

vector<int> find_subset(int l, int u, vector<int> _w) {
    int n = _w.size();

    deque<pair<u32, int>> w, used;
    for (int i = 0; i < n; ++i) {
        w.emplace_back(_w[i], i);
    }
    sort(w.begin(), w.end());

    u32 s = 0;
    while (s < l && !w.empty()) {
        auto const [x, i] = w.front();
        if (s+x > u) break;
        w.pop_front();
        used.emplace_back(x, i);
        s += x;
    }

    while (s < l && !w.empty()) {
        auto const [x, i] = used.front();
        auto const [y, j] = w.back();
        s -= x, s += y;
        used.pop_front();
        w.pop_back();
        used.emplace_back(y, j);
    }

    if (l <= s && s <= u) {
        vector<int> ans; ans.reserve(used.size());
        for (auto const &[x, i] : used) ans.push_back(i);
        return ans;
    }

    else {
        return vector<int>();
    }
}

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

molecules.cpp: In function 'std::vector<int> find_subset(int, int, std::vector<int>)':
molecules.cpp:15:14: warning: comparison of integer expressions of different signedness: 'u32' {aka 'unsigned int'} and 'int' [-Wsign-compare]
   15 |     while (s < l && !w.empty()) {
      |            ~~^~~
molecules.cpp:17:17: warning: comparison of integer expressions of different signedness: 'u32' {aka 'unsigned int'} and 'int' [-Wsign-compare]
   17 |         if (s+x > u) break;
      |             ~~~~^~~
molecules.cpp:23:14: warning: comparison of integer expressions of different signedness: 'u32' {aka 'unsigned int'} and 'int' [-Wsign-compare]
   23 |     while (s < l && !w.empty()) {
      |            ~~^~~
molecules.cpp:32:11: warning: comparison of integer expressions of different signedness: 'int' and 'u32' {aka 'unsigned int'} [-Wsign-compare]
   32 |     if (l <= s && s <= u) {
      |         ~~^~~~
molecules.cpp:32:21: warning: comparison of integer expressions of different signedness: 'u32' {aka 'unsigned int'} and 'int' [-Wsign-compare]
   32 |     if (l <= s && s <= u) {
      |                   ~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...