fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef pair<double, double> data;
  5. vector<data> input;
  6. double s;
  7. int n;
  8.  
  9. double getTime(double x, double y){
  10. double t = (x - input[0].first)/input[0].second * 1.0;
  11. t = 0;
  12. for(int i = 0; i < n; ++i){
  13. if(input[i].first < x){
  14. t = max(t, (x - input[i].first)/input[i].second * 1.0);
  15. }else if(input[i].first > y){
  16. t = max(t, (input[i].first - y)/input[i].second * 1.0);
  17. }
  18. }
  19.  
  20. return t;
  21. }
  22.  
  23. bool cmp(data d1, data d2){
  24. return d1.second < d2.second;
  25. }
  26.  
  27. int main(){
  28. cin >> n;
  29. double t2, t1, s, t = 0;
  30. double l, r, m, temp;
  31. cin >> temp;
  32. input.push_back(make_pair(temp,0));
  33. l = temp;
  34. r = temp;
  35. for(int i = 1; i < n; ++i){
  36. cin >> temp;
  37. l = min(temp, l);
  38. r = max(temp, r);
  39. input.push_back(make_pair(temp,0));
  40. }
  41.  
  42. for(int i = 0; i < n; ++i){
  43. cin >> input[i].second;
  44. }
  45.  
  46. while(l != r ){
  47. m = (l + r)/2;
  48. if(l == m) break;
  49. t1 = getTime(m, r);
  50. t2 = getTime(l, m);
  51. t = min(t1, t2);
  52. //cout << t1 << " " << t2 << endl;
  53. if(max(t1, t2) - min(t1, t2) < 0.00000009) break;
  54. if(t1 > t2) r = m;
  55. else l = m;
  56. }
  57. //cout << l << " " << r;
  58. printf("%.9f", t);
  59. //for(int i = 0; i < input.size(); ++i) cout << input[i].first << " " << input[i].second << endl;
  60.  
  61.  
  62. }
  63.  
Success #stdin #stdout 0s 16064KB
stdin
Standard input is empty
stdout
0.000000000