답안 #1040387

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1040387 2024-08-01T03:00:26 Z vjudge1 학교 설립 (IZhO13_school) C++17
100 / 100
191 ms 26448 KB
#include <bits/stdc++.h>
#ifdef LOCAL
#include <bits/debug.hpp>
#endif // LOCAL

#define ll long long
#define all(x) x.begin(), x.end()
#define Neco "Schools"
#define resp(x) sort(all(x)), x.resize(unique(all(x)) - x.begin())
#define getbit(x,i) ((x >> i)&1)
#define _left id * 2, l, mid
#define _right id * 2 + 1, mid + 1, r
#define cntbit(x) __builtin_popcountll(x)
#define fi(i, a, b) for(int i = a; i <= b; i++)
#define fid(i, a, b) for(int i = a; i >= b; i--)
#define maxn (int) 3e5 + 7

using namespace std;

const ll mod = 1e9 + 7; //972663749
const ll base = 911382323;

int n, n1, n2;
pair<int, int> a[maxn];
multiset<int> S1;
set<pair<int, int>> S2, S3;
ll Sum;

void solve()
{

    cin >> n >> n1 >> n2;
    fi(i, 1, n) cin >> a[i].first >> a[i].second;

    sort(a + 1, a + 1 + n, greater<>());
    fi(i, 1, n) {
        if(i <= n1) S1.insert(a[i].second - a[i].first), Sum += a[i].first;
        else {
            S2.insert({a[i].first, i});
            S3.insert({a[i].second, i});
        }
    }

    fi(_, 1, n2) {
        int th = 0, Max = -1e18;

        ll val = *S1.rbegin() + S2.rbegin()->first;
        if(val > Max) {
            Max = val, th = 1;
        }

        val = S3.rbegin()->first;
        if(val > Max) {
            Max = val, th = 2;
        }

        Sum += Max;
        if(th == 1) {
            int id = S2.rbegin() -> second;
            S1.erase(prev(S1.end()));
            S1.insert({a[id].second - a[id].first});

            S2.erase({a[id].first, id});
            S3.erase({a[id].second, id});
        }

        if(th == 2) {
            int id = S3.rbegin() -> second;

            S2.erase({a[id].first, id});
            S3.erase({a[id].second, id});
        }

    }

    cout << Sum;

}


int main()
{

    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    if(fopen(Neco".inp", "r")) {
        freopen(Neco".inp", "r", stdin);
        freopen(Neco".out", "w", stdout);
    }


    int nTest = 1;
//    cin >> nTest;


    while(nTest--)
    {
        solve();
    }


    return 0;
}

Compilation message

school.cpp: In function 'void solve()':
school.cpp:45:27: warning: overflow in conversion from 'double' to 'int' changes value from '-1.0e+18' to '-2147483648' [-Woverflow]
   45 |         int th = 0, Max = -1e18;
      |                           ^~~~~
school.cpp: In function 'int main()':
school.cpp:89:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   89 |         freopen(Neco".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
school.cpp:90:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   90 |         freopen(Neco".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 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 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 2 ms 860 KB Output is correct
8 Correct 1 ms 604 KB Output is correct
9 Correct 2 ms 604 KB Output is correct
10 Correct 1 ms 604 KB Output is correct
11 Correct 2 ms 788 KB Output is correct
12 Correct 3 ms 860 KB Output is correct
13 Correct 11 ms 2908 KB Output is correct
14 Correct 44 ms 8528 KB Output is correct
15 Correct 100 ms 17596 KB Output is correct
16 Correct 157 ms 18756 KB Output is correct
17 Correct 146 ms 20048 KB Output is correct
18 Correct 154 ms 22096 KB Output is correct
19 Correct 173 ms 24144 KB Output is correct
20 Correct 191 ms 26448 KB Output is correct