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.  
  18. bool can(vector<pair<ll,ll>>& friends,ld mid)
  19. {
  20. ld l = -1e15 , r = 1e15;
  21. for (int i = 0; i < friends.size(); i++)
  22. {
  23. ld friend_pos = friends[i].first;
  24. ld friend_speed = friends[i].second;
  25. if(friend_pos >= l && friend_pos <= r)
  26. {
  27. l = max(l , friend_pos - friend_speed*mid);
  28. r = min(r , friend_pos + friend_speed*mid);
  29. }
  30. else if(friend_pos < l)
  31. {
  32. if(friend_pos + friend_speed*mid >= l)
  33. {
  34. r = min(r , friend_pos + friend_speed*mid);
  35. }
  36. else
  37. {
  38. return false;
  39. }
  40. }
  41. else if(friend_pos > r)
  42. {
  43. if(friend_pos - friend_speed*mid <= r)
  44. {
  45. l = max(l , friend_pos - friend_speed*mid);
  46. }
  47. else
  48. {
  49. return false;
  50. }
  51. }
  52.  
  53. }
  54. return true;
  55. }
  56.  
  57. int main()
  58. {
  59. ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
  60. int n; cin >> n;
  61. // pos|speed
  62. vector<pair<ll,ll>> friends(n);
  63. for (int i = 0; i < n; i++)
  64. {
  65. cin >> friends[i].first;
  66. }
  67. for (int i = 0; i < n; i++)
  68. {
  69. cin >> friends[i].second;
  70. }
  71. sort(all(friends));
  72.  
  73. ld low = 0 , high = 1e15 , pos = -1;
  74. for (int i = 0; i < 100; i++)
  75. {
  76. ld mid = (high+low)/2;
  77. if(can(friends,mid))
  78. {
  79. pos = mid;
  80. high = mid;
  81. }
  82. else
  83. {
  84. low = mid;
  85. }
  86. }
  87. cout << fxd(10) << (ld)pos;
  88. }
Success #stdin #stdout 0.02s 5288KB
stdin
Standard input is empty
stdout
0.0000000000