제출 #1351525

#제출 시각아이디문제언어결과실행 시간메모리
1351525michael12학교 설립 (IZhO13_school)C++20
15 / 100
80 ms19080 KiB
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<numeric>
#include<string>
#include<stack>
#include<queue>
#include<string.h>
#include<array>
#include<climits>
#include<algorithm>
#include<cmath>
using namespace std;

#define ff first
#define ss second
#define int long long
#define pb push_back
#define endl '\n'
const int maxn = 1e5 + 2;
const int Mx = 1e12;
const int oo = 1e18;
const int LG = 20;
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, m, k;
    cin >> n >> m >> k;
    vector<pair<int, pair<int, int>>> p, p1;
    for(int i = 0; i < n; i++){
        int u, v;
        cin >> u >> v;
        p.push_back({u, {v, i}});
        p1.push_back({v, {u, i}});
    }
    sort(p.rbegin(), p.rend());
    int id = 0;
    int cur = 0;
    vector<bool> seen(n, false);
    for(int i = 0; i < n; i++){
        if(id == m) break;
        if(p[i].ff < p[i].ss.ff) continue;
        cur += p[i].ff;
        seen[p[i].ss.ss] = true;
        id += 1;
    }
    sort(p.rbegin(), p.rend());
    sort(p1.rbegin(), p1.rend());
    int id1 = 0;
    int cur1 = 0;
    for(int i = 0; i < n; i++){
       if(id1 == k) break;
       if(seen[p1[i].ss.ss] == true) continue;
       cur1 += p1[i].ff;
       id1 += 1;
    }
    int ans1 = cur + cur1;


    vector<bool> seen1(n, false);
    int D = 0, D1 = 0;
    int sum = 0, sum1 = 0;
    for(int i = 0; i < n; i++){
        if(D == k) break;
        sum += p1[i].ff;
        seen1[p1[i].ss.ss] = true;
        D += 1;
    }
    // for(auto T : p1){
    //     cout << T.ff << " " << T.ss.ff;
    //     cout << endl;
    // }
    // return 0;
    for(int i = 0; i < n; i++){
        if(D1 == m) break;
        if(seen1[p[i].ss.ss] == true) continue;
        sum1 += p[i].ff;
        D1 += 1;
    }
    cout << max(ans1, sum + sum1);
    
}
#Verdict Execution timeMemoryGrader output
Fetching results...