제출 #89119

#제출 시각아이디문제언어결과실행 시간메모리
89119Lkvatashidze학교 설립 (IZhO13_school)C++17
5 / 100
127 ms9468 KiB
#include <bits/stdc++.h>
#define ll long long
using namespace std;

  struct ABC {
    int fir, sec, ind;
 };

   bool comp (ABC a, ABC b) {
      return a.fir>b.fir;
   }

   ABC v[300005];
   pair < int, int > se[300005], fi[300005];
   bool used[300005];

 int main() {

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

     ll n, m, s;
      cin >> n >> m >> s;

    for (int k=1; k<=n; k++) {
        cin >> v[k].fir;
        cin >> v[k].sec;
        fi[k].first=v[k].fir;
        fi[k].second=k;
        se[k].first=v[k].sec;
        se[k].second=k;
        v[k].ind=k;
    }

    sort(v+1,v+1+n, comp);

        int k=1; ll ans=0;

  while (k<n && s && m) {
        ans+=max(v[k].sec+v[k+1].fir,v[k].fir+v[k+1].sec);
        used[v[k].ind]=true;
        used[v[k+1].ind]=true;
        m--;
        s--;
        k+=2;
    }


     if (m==0) {
      sort(se+1,se+1+n);
      reverse(se+1,se+1+n);
      for (int i=1; i<=n; i++) {
            if (s==0) break;
        if (used[se[i].second]) continue;
        ans+=se[i].first;
        s--;
      }
       cout << ans;
       return 0;
  }
     if (s==0) {
      sort(fi+1,fi+1+n);
      reverse(fi+1,fi+1+n);
      for (int i=1; i<=n; i++) {
            if (m==0) break;
        if (used[fi[i].second]) continue;
        ans+=fi[i].first;
        m--;
      }
       cout << ans;
       return 0;
 }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...