답안 #169568

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
169568 2019-12-21T06:57:34 Z davitmarg 학교 설립 (IZhO13_school) C++17
25 / 100
111 ms 10732 KB
/*DavitMarg*/
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#include <map>
#include <unordered_map>
#include <set>
#include <queue>
#include <iomanip>
#include <bitset>
#include <stack>
#include <cassert>
#include <iterator>
#include <fstream>
#define mod 1000000007ll
#define LL long long
#define LD long double
#define MP make_pair
#define PB push_back
#define all(v) v.begin(), v.end()
using namespace std;

const int N = 300005;

int n, m, s, k;
LL ans = 0;
pair<LL, LL> a[N];
set<LL> M, S;
vector<pair<LL, LL>> K;
int main()
{
    cin >> n >> m >> s;
    k = n - m - s;
    for (int i = 1; i <= n; i++)
        scanf("%lld%lld", &a[i].first, &a[i].second);
    sort(a + 1, a + 1 + n, [](pair<LL, LL> a, pair<LL, LL> b) {
        return a.first - a.second < b.first - b.second;
    });
    for (int i = 1; i <= s; i++)
    {
        ans += a[i].second;
        S.insert(a[i].second);
    }
    for (int i = s + 1; i <= s + k; i++)
        K.PB(a[i]);

    for (int i = s + k + 1; i <= n; i++)
    {
        ans += a[i].first;
        M.insert(a[i].first);
    }

    while (!K.empty())
    {
        LL x = K.back().first, y = K.back().second;
        K.pop_back();
        LL d1 = -1, d2 = -1;
        if (!M.empty())
            d1 = x - (*M.begin());
        if (!S.empty())
            d2 = y - (*S.begin());
        if (max(d1, d2) < 0)
            continue;
        if (d1 > d2)
        {
            M.erase(M.begin());
            M.insert(x);
            ans += d1;
        }
        else
        {
            S.erase(S.begin());
            S.insert(y);
            ans += d2;
        }
    }
    cout << ans << endl;
    return 0;
}

/*


2
BB
1000 1003
1000 1000


*/

Compilation message

school.cpp: In function 'int main()':
school.cpp:38:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld%lld", &a[i].first, &a[i].second);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Incorrect 2 ms 376 KB Output isn't correct
5 Incorrect 2 ms 376 KB Output isn't correct
6 Incorrect 2 ms 376 KB Output isn't correct
7 Incorrect 4 ms 632 KB Output isn't correct
8 Correct 4 ms 632 KB Output is correct
9 Incorrect 4 ms 636 KB Output isn't correct
10 Incorrect 4 ms 632 KB Output isn't correct
11 Incorrect 5 ms 760 KB Output isn't correct
12 Incorrect 4 ms 632 KB Output isn't correct
13 Incorrect 23 ms 2296 KB Output isn't correct
14 Incorrect 42 ms 4212 KB Output isn't correct
15 Incorrect 63 ms 9068 KB Output isn't correct
16 Correct 107 ms 7132 KB Output is correct
17 Incorrect 84 ms 7036 KB Output isn't correct
18 Incorrect 90 ms 9148 KB Output isn't correct
19 Incorrect 97 ms 8676 KB Output isn't correct
20 Incorrect 111 ms 10732 KB Output isn't correct