Submission #169569

# Submission time Handle Problem Language Result Execution time Memory
169569 2019-12-21T06:57:52 Z davitmarg Schools (IZhO13_school) C++17
25 / 100
233 ms 16356 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];
multiset<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);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 256 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 604 KB Output is correct
9 Incorrect 4 ms 632 KB Output isn't correct
10 Incorrect 4 ms 632 KB Output isn't correct
11 Incorrect 5 ms 632 KB Output isn't correct
12 Incorrect 5 ms 632 KB Output isn't correct
13 Incorrect 25 ms 2424 KB Output isn't correct
14 Incorrect 46 ms 3672 KB Output isn't correct
15 Incorrect 64 ms 7396 KB Output isn't correct
16 Correct 153 ms 11640 KB Output is correct
17 Incorrect 174 ms 13172 KB Output isn't correct
18 Incorrect 178 ms 13444 KB Output isn't correct
19 Incorrect 220 ms 14572 KB Output isn't correct
20 Incorrect 233 ms 16356 KB Output isn't correct