Advertisement
mickypinata

GCJ2018-1A2: Bit Party

Jul 7th, 2021
970
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.41 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long lli;
  5.  
  6. const int C = 1000;
  7.  
  8. int pay[C + 1], pack[C + 1], mxBit[C + 1];
  9. int nCashier, nRobot, bits;
  10.  
  11. bool canDivide(lli tme){
  12.     vector<int> purchase;
  13.     for(int i = 1; i <= nCashier; ++i){
  14.         if(pack[i] >= tme){
  15.             purchase.push_back(0);
  16.             continue;
  17.         }
  18.         lli mx = (tme - pack[i]) / pay[i];
  19.         if(mx >= mxBit[i]){
  20.             purchase.push_back(mxBit[i]);
  21.         } else {
  22.             purchase.push_back(mx);
  23.         }
  24.     }
  25.     sort(purchase.begin(), purchase.end(), greater<int>());
  26.     lli sum = 0;
  27.     for(int i = 0; i < nRobot; ++i){
  28.         sum += purchase[i];
  29.     }
  30.     if(sum >= bits){
  31.         return true;
  32.     } else {
  33.         return false;
  34.     }
  35. }
  36.  
  37. int main(){
  38.  
  39.     int Q;
  40.     scanf("%d", &Q);
  41.     for(int q = 1; q <= Q; ++q){
  42.         cout << "Case #" << q << ": ";
  43.         scanf("%d%d%d", &nRobot, &bits, &nCashier);
  44.         for(int i = 1; i <= nCashier; ++i){
  45.             scanf("%d%d%d", &mxBit[i], &pay[i], &pack[i]);
  46.         }
  47.         lli l = 1;
  48.         lli r = 2e18;
  49.         lli mn = 2e18;
  50.         while(l <= r){
  51.             lli m = (l + r) / 2;
  52.             if(canDivide(m)){
  53.                 mn = min(mn, m);
  54.                 r = m - 1;
  55.             } else {
  56.                 l = m + 1;
  57.             }
  58.         }
  59.         cout << mn << '\n';
  60.     }
  61.  
  62.     return 0;
  63. }
  64.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement