Szczegółowe omówienie zadania D. Renting Bikes z platformy Codeforces
https://youtu.be/RvhRrdDvc30?t=1392
–
Link do zadania:
https://codeforces.com/problemset/problem/363/D
Zadanie pochodzi z platformy Codeforces:
https://tiny.pl/t69lp
https://tiny.pl/t69lp
–
Zadanie pokazuje algorytm Binary Search po wyniku:
https://youtu.be/RvhRrdDvc30?t=2525
——-
Poniżej kod wzorcowy do zadania użyty w powyższym omówieniu który otrzymuje 100%:
–
#include <bits/stdc++.h> using namespace std; const int MAX_TABLE = 1e5+7; int boys_money[MAX_TABLE]; int bikes_cost[MAX_TABLE]; int number_of_boys, number_of_bikes, budget; bool CanWeAchieveBikes(int number_of_checked_bikes) { int act_budget, difference; int i; if ( number_of_checked_bikes > number_of_boys ) return false; act_budget = budget; for (i=0; i<number_of_checked_bikes; ++i) { difference = boys_money[number_of_boys-i-1] - bikes_cost[number_of_checked_bikes-i-1]; if ( difference >= 0 ) continue; act_budget = act_budget + difference; if ( act_budget < 0 ) return false; } return true; } int BinarySearchRight_Result (int left_border, int right_border) { int middle; while (left_border < right_border) { middle = (left_border + right_border + 1) / 2; if ( CanWeAchieveBikes(middle) == true ) left_border = middle; else right_border = middle - 1; } return left_border ; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int bikes_boys_can_rent, total_cost_of_renting, own_money_required; int i; cin >> number_of_boys >> number_of_bikes >> budget; for (i=0; i<number_of_boys; ++i) cin >> boys_money[i]; for (i=0; i<number_of_bikes; ++i) cin >> bikes_cost[i]; sort (boys_money, boys_money+number_of_boys); sort (bikes_cost, bikes_cost+number_of_bikes); bikes_boys_can_rent = BinarySearchRight_Result (0, number_of_bikes); total_cost_of_renting = 0; for (i=0; i<bikes_boys_can_rent; ++i) { total_cost_of_renting += bikes_cost[i]; } own_money_required = total_cost_of_renting - budget; own_money_required = max (own_money_required,0); cout << bikes_boys_can_rent << " " << own_money_required << "\n"; return 0; }