Guest User

Spoj Prata by Tasfik

a guest
Aug 23rd, 2020
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.66 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5. bool can_cook(int prata, int cooks, int *rank, int minute)
  6. {
  7.  
  8.     int cur_cook = 0, cur_count = 0;
  9.     int minute_used = 0;
  10.     for (int i = 1; i <= prata; i++)
  11.     {
  12.         cur_count++;
  13.         minute_used = minute_used + rank[cur_cook] * cur_count;
  14.         if (minute_used > minute)
  15.         {
  16.             minute_used = 0;
  17.             cur_cook++;
  18.             cur_count = 1;
  19.             if (cur_cook >= cooks)
  20.                 return false;
  21.             minute_used = minute_used + rank[cur_cook] * cur_count;
  22.         }
  23.     }
  24.     return true;
  25. }
  26.  
  27. int minutes_needed(int prata, int cooks, int *arr)
  28. {
  29.     int min_rank = arr[0];
  30.     for (int i = 0; i < cooks; i++)
  31.     {
  32.         min_rank = min(min_rank, arr[i]);
  33.     }
  34.  
  35.     int left = 0, right = 0, mid;
  36.     for (int i = 1; i <= prata; i++)
  37.     {
  38.         //left = left + min_rank * i;
  39.         right = right + min_rank * i;
  40.     }
  41.     //cout << "left: " << left << " right: " << right << endl;
  42.     int min_minute = right;
  43.  
  44.     while (left <= right)
  45.     {
  46.         mid = (left + right) / 2;
  47.         if (can_cook(prata, cooks, arr, mid))
  48.         {
  49.             min_minute = mid;
  50.             right = mid - 1;
  51.         }
  52.         else
  53.         {
  54.             left = mid + 1;
  55.         }
  56.     }
  57.     return min_minute;
  58. }
  59.  
  60. int main()
  61. {
  62.     int t;
  63.     cin >> t;
  64.     while (t--)
  65.     {
  66.         int prata;
  67.         cin >> prata;
  68.         int cooks;
  69.         cin >> cooks;
  70.         int arr[55];
  71.         for (int i = 0; i < cooks; i++)
  72.             cin >> arr[i];
  73.         cout << minutes_needed(prata, cooks, arr) << endl;
  74.     }
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment