답안 #817996

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
817996 2023-08-09T22:55:34 Z Liudas Hiring (IOI09_hiring) C++17
100 / 100
633 ms 21308 KB
#include <bits/stdc++.h>
#define endl "\n"
using namespace std;
struct node{
    double Q;
    double P;
    double U;
    int id;
};
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    long long N, W;
    double H = 0, BP = 0;
    cin >> N >> W;
    vector<node> arr(N);
    for(int i = 0; i < N; i ++){
        cin >> arr[i].P >> arr[i].Q;
        arr[i].U = arr[i].P/arr[i].Q;
        arr[i].id = i + 1;
    }
    sort(arr.begin(), arr.end(), [&](node a, node b){return a.U < b.U;});
    priority_queue<pair<double, int>> que;
    bitset<500500> in, best;
    double qual = 0;
    for(int i = 0; i < N; i ++){
        qual += arr[i].Q;
        que.push({arr[i].Q, arr[i].id});
        in[arr[i].id] = 1;
        while(qual * arr[i].U > W){
            qual -= que.top().first;
            in[que.top().second] = 0;
            que.pop();
        }
        if(que.size() > H){
            H = que.size();
            best = in;
            BP = qual * arr[i].U;
        }
        else if(que.size() == H && BP > qual * arr[i].U){
            BP = qual * arr[i].U;
            best = in;
        }
    }
    cout << H << endl;
    for(int i = 0; i < N+1; i ++){
        if(best[i])
        cout << i << endl;
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 0 ms 340 KB Output is correct
6 Correct 2 ms 468 KB Output is correct
7 Correct 3 ms 468 KB Output is correct
8 Correct 2 ms 468 KB Output is correct
9 Correct 6 ms 584 KB Output is correct
10 Correct 8 ms 676 KB Output is correct
11 Correct 5 ms 596 KB Output is correct
12 Correct 11 ms 936 KB Output is correct
13 Correct 6 ms 724 KB Output is correct
14 Correct 16 ms 980 KB Output is correct
15 Correct 17 ms 1108 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 23 ms 1316 KB Output is correct
5 Correct 45 ms 2788 KB Output is correct
6 Correct 324 ms 12168 KB Output is correct
7 Correct 516 ms 17172 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 468 KB Output is correct
2 Correct 1 ms 468 KB Output is correct
3 Correct 1 ms 468 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 468 KB Output is correct
2 Correct 1 ms 460 KB Output is correct
3 Correct 1 ms 468 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 468 KB Output is correct
2 Correct 2 ms 468 KB Output is correct
3 Correct 2 ms 468 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 130 ms 5104 KB Output is correct
2 Correct 132 ms 5540 KB Output is correct
3 Correct 131 ms 5696 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 206 ms 8868 KB Output is correct
2 Correct 207 ms 9372 KB Output is correct
3 Correct 211 ms 9404 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 500 ms 18748 KB Output is correct
2 Correct 507 ms 19476 KB Output is correct
3 Correct 508 ms 19248 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 604 ms 20692 KB Output is correct
2 Correct 608 ms 21300 KB Output is correct
3 Correct 633 ms 21308 KB Output is correct