Advertisement
Guest User

Untitled

a guest
Apr 19th, 2018
442
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.26 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <vector>
  3. #include <algorithm>
  4. #define pb push_back
  5. #define lli long long int
  6. using namespace std;
  7.  
  8. const int MAX_C = (int)1e3 + 5;
  9. const lli INF_LL = (lli)2e18;
  10.  
  11. int m[MAX_C];
  12. int s[MAX_C];
  13. int p[MAX_C];
  14.  
  15. int main(void) {
  16.     int t;
  17.     int r, b, c;
  18.  
  19.     scanf(" %d", &t);
  20.     for (int test = 1; test <= t; test++) {
  21.         scanf(" %d %d %d", &r, &b, &c);
  22.         for (int i = 0; i < c; i++) {
  23.             scanf(" %d %d %d", &m[i], &s[i], &p[i]);
  24.         }
  25.  
  26.         lli low = 0;
  27.         lli high = INF_LL;
  28.         lli best = 0;
  29.         while(low <= high) {
  30.             lli mid = (low + high) / 2;
  31.             lli need = b;
  32.             vector <lli> bits;
  33.  
  34.             for (int i = 0; i < c; i++) {
  35.                 bits.pb(min(1LL * m[i], max(0LL, (mid - p[i]) / s[i])));
  36.             }
  37.             sort(bits.begin(), bits.end());
  38.             reverse(bits.begin(), bits.end());
  39.             for (int i = 0; i < r && i < c; i++) {
  40.                 need -= bits[i];
  41.             }
  42.  
  43.             if (need <= 0) {
  44.                 best = mid;
  45.                 high = mid - 1;
  46.             } else {
  47.                 low = mid + 1;
  48.             }
  49.         }
  50.         printf("Case #%d: %lld\n", test, best);
  51.     }
  52.     return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement