제출 #1211241

#제출 시각아이디문제언어결과실행 시간메모리
1211241madamadam3Detecting Molecules (IOI16_molecules)C++20
9 / 100
0 ms328 KiB
#include "molecules.h"
#include <bits/stdc++.h>

using namespace std;

// const int MAX_SUM = 500'000;
// using bset = bitset<MAX_SUM+1>;

int n, l, u;
vector<int> o, w;

int check_closest(int k) {
    int cur_sum = 0;

    for (int idx = k; idx < n; idx++) {
        int i = o[idx];

        if (cur_sum + w[i] <= u) {
            cur_sum += w[i];
        }
    }

    // cout << "k = " << k << " sum = " << cur_sum << "\n";
    return l - cur_sum;
}

vector<int> find_subset(int L, int U, vector<int> W) {
    w = W;
    n = w.size();
    l = L;
    u = U;
    o.resize(n); iota(o.begin(), o.end(), 0);
    sort(o.begin(), o.end(), [&](int a, int b) {return w[a] < w[b];});
    reverse(o.begin(), o.end());

    int lo = 0, hi = n;
    while (lo < hi) {
        int mid = lo + (hi - lo) / 2;

        int ans1 = check_closest(mid), ans2 = check_closest(mid+1);
        if (ans1 < ans2) {
            hi = mid;
        } else {
            lo = mid + 1;
        }
    }
    
    vector<int> ans;
    int cur_sum = 0;

    // cout << "lo = " << lo << "\n";
    for (int idx = lo; idx < n; idx++) {
        int i = o[idx];

        if (cur_sum + w[i] <= u) {
            cur_sum += w[i];
            ans.push_back(i);
        }
    }

    if (cur_sum < l || cur_sum > u) ans.clear();
    return ans;
}

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

molecules.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
molecules_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...