답안 #925110

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
925110 2024-02-10T19:05:15 Z Zygno Stove (JOI18_stove) C++17
100 / 100
419 ms 3156 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;

struct guest
{    
    int start;
    int end;
};

struct breakLength
{
    int start;
    int length;
};

int binarySearchGuests(const std::vector<guest>& guests, int targetStart) {
    int low = 0;
    int high = guests.size() - 1;
    
    while (low <= high) {
        int mid = low + (high - low) / 2;
        
        if (guests[mid].start == targetStart) {
            return mid; // Target found, return its index
        } else if (guests[mid].start < targetStart) {
            low = mid + 1;
        } else {
            high = mid - 1;
        }
    }
    
    return -1; // Target not found
}

int main()
{
    int n; // Number of guests
    int k; // Number of matches

    cin >> n >> k;

    vector<guest> guests(n);    
    vector<breakLength> breaks(n-1);
    for (int i = 0; i < n; i++)
    {
        int temp = 0;
        cin >> temp;
        guests[i].start = temp;
        guests[i].end = temp+1;
        if (i > 0)
        {
            breaks[i-1].start = guests[i].start;
            breaks[i-1].length = guests[i].start - guests[i-1].end; //Length of break between guests
        }
    }

    //Combine guests until there are k guests
    //Order breaks by length
    sort(breaks.begin(), breaks.end(), [](breakLength a, breakLength b) { return a.length < b.length; });

    int i = 0;
    while(n - i > k)
    {
        int j = binarySearchGuests(guests, breaks[i].start);
        
        int x = 1;
        while(guests[j-x].end == -1)
        {
            x++;
        }
        guests[j-x].end = guests[j].end;
        guests.erase(guests.begin() + j);

        i++;
    }

    int stove = 0;
    n = guests.size();
    for(int i = 0; i < n; i++)
    {
        stove += guests[i].end - guests[i].start;
    }

    cout << stove << endl;

    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 344 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 1 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 344 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 1 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 2 ms 348 KB Output is correct
11 Correct 2 ms 348 KB Output is correct
12 Correct 2 ms 348 KB Output is correct
13 Correct 1 ms 348 KB Output is correct
14 Correct 2 ms 348 KB Output is correct
15 Correct 2 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 344 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 1 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 2 ms 348 KB Output is correct
11 Correct 2 ms 348 KB Output is correct
12 Correct 2 ms 348 KB Output is correct
13 Correct 1 ms 348 KB Output is correct
14 Correct 2 ms 348 KB Output is correct
15 Correct 2 ms 348 KB Output is correct
16 Correct 409 ms 2952 KB Output is correct
17 Correct 417 ms 2948 KB Output is correct
18 Correct 419 ms 3156 KB Output is correct
19 Correct 406 ms 2952 KB Output is correct
20 Correct 324 ms 2952 KB Output is correct
21 Correct 112 ms 2908 KB Output is correct
22 Correct 44 ms 2908 KB Output is correct
23 Correct 35 ms 2908 KB Output is correct
24 Correct 36 ms 2888 KB Output is correct