Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- using namespace std;
- bool can_cook(int prata, int cooks, int *rank, int minute)
- {
- int cur_cook = 0, cur_count = 0;
- int minute_used = 0;
- for (int i = 1; i <= prata; i++)
- {
- cur_count++;
- minute_used = minute_used + rank[cur_cook] * cur_count;
- if (minute_used > minute)
- {
- minute_used = 0;
- cur_cook++;
- cur_count = 1;
- if (cur_cook >= cooks)
- return false;
- minute_used = minute_used + rank[cur_cook] * cur_count;
- }
- }
- return true;
- }
- int minutes_needed(int prata, int cooks, int *arr)
- {
- int min_rank = arr[0];
- for (int i = 0; i < cooks; i++)
- {
- min_rank = min(min_rank, arr[i]);
- }
- int left = 0, right = 0, mid;
- for (int i = 1; i <= prata; i++)
- {
- //left = left + min_rank * i;
- right = right + min_rank * i;
- }
- //cout << "left: " << left << " right: " << right << endl;
- int min_minute = right;
- while (left <= right)
- {
- mid = (left + right) / 2;
- if (can_cook(prata, cooks, arr, mid))
- {
- min_minute = mid;
- right = mid - 1;
- }
- else
- {
- left = mid + 1;
- }
- }
- return min_minute;
- }
- int main()
- {
- int t;
- cin >> t;
- while (t--)
- {
- int prata;
- cin >> prata;
- int cooks;
- cin >> cooks;
- int arr[55];
- for (int i = 0; i < cooks; i++)
- cin >> arr[i];
- cout << minutes_needed(prata, cooks, arr) << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment