Advertisement
Alex_tz307

USACO 2020 January Contest, Silver Problem 2. Loan Repayment

Dec 6th, 2020
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.04 KB | None | 0 0
  1. // http://www.usaco.org/index.php?page=viewproblem2&cpid=991
  2. #include <bits/stdc++.h>
  3. #define int long long
  4.  
  5. using namespace std;
  6.  
  7. ifstream fin("loan.in");
  8. ofstream fout("loan.out");
  9.  
  10. const int INF = 1e16L;
  11.  
  12. int32_t main() {
  13.     int N, K, M;
  14.     fin >> N >> K >> M;
  15.     int st = 1, dr = INF, ans = INF;
  16.     while(st <= dr) {
  17.         int X = (st + dr) >> 1;
  18.         int k = K, G = 0;
  19.         bool ok = false;
  20.         while(k > 0 && G < N) {
  21.             int Y = (N - G) / X;
  22.             if(Y < M) {
  23.                 int left = (N - G + M - 1) / M;
  24.                 if(left <= k)
  25.                     ok = true;
  26.                 break;
  27.             }
  28.             int max_match = N - X * Y,
  29.                 num_days = (max_match - G) / Y + 1;
  30.             G += Y * num_days;
  31.             if(G >= N) {
  32.                 ok = true;
  33.                 break;
  34.             }
  35.             k -= num_days;
  36.         }
  37.         if(ok) {
  38.             ans = X;
  39.             st = X + 1;
  40.         }
  41.         else
  42.             dr = X - 1;
  43.     }
  44.     fout << ans;
  45. }
  46.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement