Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #include <iostream>
- #include <cmath>
- #include<string>
- #include<cstdbool>
- using namespace std;
- void solve ();
- double h, l, r, k;
- double t(double h, double l, double r, double k );
- double le (double h, double l, double r, double k);
- double ts(double z, double r);
- int main()
- {
- int t = 1;
- //cin >> t; //x=t;
- while (cin >> h >> l >> r >> k) {
- if (h || l || r || k)
- solve();
- }
- return 0;
- }
- void solve() {
- double ans = ts (0, r);
- cout << fixed << setprecision(2) << ans << endl;
- }
- double t(double i ) {
- return (sqrt(h * h + i * i) + k * sqrt(l * l + (r - i) * (r - i)));
- }
- double le (double i) {
- return (double)sqrt(h * h + i * i) + (double) sqrt(l * l + (r - i) * (r - i));
- }
- double ts(double z, double r) {
- double low = z;
- double high = r;
- double mid1 = low + (r - z) / 3.0;
- double mid2 = high - (r - z) / 3.0;
- double tmid2 = t(mid2);
- double tmid1 = t(mid1);
- if (high -low <= 0.0000001) {
- //cerr << (mid2);
- return le (mid2);
- }
- else if (tmid2 > tmid1) {
- return ts( low, mid2);
- }
- else if (tmid2 < tmid1) {
- return ts(mid1, high);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement