Advertisement
Guest User

Audit Sale

a guest
Jun 13th, 2016
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.27 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int N = 1e5 + 5;
  6.  
  7. struct Element {
  8.     int price;
  9.     int prob;
  10.  
  11.     bool operator < (const Element &o) const {
  12.         return price * 100 + o.price * o.prob > o.price * 100 + price * prob;
  13.     }
  14. } a[N];
  15.  
  16. long long prefix[N];
  17. long long suffix[N];
  18.  
  19. int n, m, k;
  20.  
  21. long long solve() {
  22.     sort(a + 1, a + 1 + n);
  23.  
  24.     multiset<int> S;
  25.     long long sum = 0;
  26.     for (int i = 1; i <= n; ++i) {
  27.         S.insert(a[i].price);
  28.         sum += a[i].price;
  29.         if (S.size() > k) {
  30.             sum -= *S.begin();
  31.             S.erase(S.begin());
  32.         }
  33.         prefix[i] = sum * 100;
  34.     }
  35.  
  36.     S.clear(); sum = 0;
  37.     for (int i = n; i >= 1; --i) {
  38.         S.insert(a[i].price * a[i].prob);
  39.         sum += a[i].price * a[i].prob;
  40.         if (S.size() > (m - k)) {
  41.             sum -= *S.begin();
  42.             S.erase(S.begin());
  43.         }
  44.         suffix[i] = sum;
  45.     }
  46.  
  47.     long long ans = 0;
  48.     for (int i = k; i + (m - k) <= n; ++i) {
  49.         ans = max(ans, prefix[i] + suffix[i + 1]);
  50.     }
  51.  
  52.     return ans;
  53. }
  54.  
  55. int main() {
  56.     cin >> n >> m >> k;
  57.     for (int i = 1; i <= n; ++i) {
  58.         cin >> a[i].price;
  59.         cin >> a[i].prob;
  60.     }
  61.  
  62.     cout << solve() << endl;
  63.     return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement