답안 #89124

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
89124 2018-12-10T10:52:39 Z Lkvatashidze 학교 설립 (IZhO13_school) C++17
15 / 100
200 ms 19572 KB
#include <bits/stdc++.h>
#define ll long long
using namespace std;

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

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

   ll sol();
   ABC v[300005];
   pair < int, int > se[300005], fi[300005];
   bool used[300005];
   ll n, m, s;
   pair < ll, ll > a[300005];
   pair < ll, ll > b[300005];
    ll ans1, ans0;
 int main() {

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


      cin >> n >> m >> s;

      ll ans=sol();

    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;
        a[k].first=v[k].fir;
        a[k].second=k;
        b[k].first=v[k].sec;
        b[k].second=k;
        v[k].ind=k;
        v[k].sum=v[k].fir+v[k].sec;
    }

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

        int k=1;

  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;
}
 ll sol() {


    sort (a+1,a+1+n);
    sort (b+1,b+1+n);

    for (ll k=n; k>=n-m+1; k--) {
        ans1+=a[k].first;
        used[a[k].second]=true;
    }

    reverse(b+1,b+1+n);

    ll i=1; ll j=1;
     while (i<=s && j<=n) {
        if (used[b[j].second]) {
            j++;
            continue;
        }
        ans1+=b[j].first;
        used[b[j].second]=true;
        j++; i++;
     }

   for (ll k=1; k<=n; k++)
     used[k]=false;

    sort (a+1,a+1+n);
    sort (b+1,b+1+n);

    for (ll k=n; k>=n-s+1; k--) {
        ans0+=b[k].first;
        used[b[k].second]=true;
    }

    reverse(a+1,a+1+n);

     i=1; j=1;
     while (i<=m && j<=n) {
        if (used[a[j].second]) {
            j++;
            continue;
        }
        ans0+=a[j].first;
        used[b[j].second]=true;
        j++; i++;
     }

       return max(ans1,ans0);


}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 428 KB Output is correct
3 Correct 2 ms 440 KB Output is correct
4 Incorrect 3 ms 648 KB Output isn't correct
5 Incorrect 2 ms 648 KB Output isn't correct
6 Incorrect 2 ms 648 KB Output isn't correct
7 Incorrect 5 ms 800 KB Output isn't correct
8 Incorrect 4 ms 800 KB Output isn't correct
9 Incorrect 6 ms 928 KB Output isn't correct
10 Incorrect 5 ms 928 KB Output isn't correct
11 Incorrect 5 ms 928 KB Output isn't correct
12 Incorrect 5 ms 928 KB Output isn't correct
13 Incorrect 23 ms 2924 KB Output isn't correct
14 Incorrect 50 ms 5556 KB Output isn't correct
15 Incorrect 100 ms 10732 KB Output isn't correct
16 Incorrect 122 ms 12140 KB Output isn't correct
17 Incorrect 138 ms 14572 KB Output isn't correct
18 Incorrect 149 ms 15964 KB Output isn't correct
19 Incorrect 166 ms 17276 KB Output isn't correct
20 Incorrect 200 ms 19572 KB Output isn't correct