fork download
  1. #include <bits/stdc++.h>
  2. #include <ext/pb_ds/assoc_container.hpp>
  3. #include <ext/pb_ds/tree_policy.hpp>
  4.  
  5. using namespace std;
  6. using namespace __gnu_pbds;
  7. using ll = long long;
  8. using ld = long double;
  9.  
  10. #define all(x) x.begin(),x.end()
  11. #define v(x) vector<x>
  12. #define nl '\n'
  13. #define fxd(x) fixed << setprecision(x)
  14. template<class t> using ordered_set = tree<t, null_type, less<t>, rb_tree_tag, tree_order_statistics_node_update>;
  15. template<class t> using ordered_multiset = tree<t, null_type, less_equal<t>, rb_tree_tag, tree_order_statistics_node_update>;
  16.  
  17. vector<pair<ll,ll>> pr;
  18. ll n , k ;
  19.  
  20. bool can(double x)
  21. {
  22. sort(all(pr),[&](pair<ll,ll> fr , pair<ll,ll> sc){
  23. return ((double)fr.first - x * (double)fr.second) > ((double)sc.first - x * (double)sc.second);
  24. });
  25. double sum = 0;
  26. for (int i = 0; i < k; i++)
  27. {
  28. sum+= (double)pr[i].first - x*(double)pr[i].second;
  29. }
  30. return sum >= 0;
  31. }
  32. int main()
  33. {
  34. ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
  35. cin >> n >> k;
  36. pr.resize(n);
  37. for (int i = 0; i < n; i++)
  38. {
  39. cin >> pr[i].first;
  40. cin >> pr[i].second;
  41. }
  42.  
  43. double l = 0,r = 1e10,pos = -1,mid;
  44.  
  45. for (int i = 0; i < 70; i++)
  46. {
  47. mid = (l + r)/2;
  48. if(can(mid))
  49. {
  50. pos = mid;
  51. l = mid;
  52. }
  53. else
  54. {
  55. r = mid;
  56. }
  57. }
  58.  
  59. cout << fxd(10) <<pos;
  60.  
  61. }
Success #stdin #stdout 0s 5304KB
stdin
Standard input is empty
stdout
10000000000.0000000000