Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <map>
- #include <set>
- #include <queue>
- #include <algorithm>
- #include <string>
- #include <cmath>
- #include <cstdio>
- #include <iomanip>
- #include <fstream>
- #include <cassert>
- #include <cstring>
- #include <unordered_set>
- #include <unordered_map>
- #include <numeric>
- #include <ctime>
- #include <bitset>
- #include <complex>
- #include <random>
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- #ifdef DEBUG
- const int MAXN = 10;
- const int MAXLOG = 4;
- const int MAXSQRT = 4;
- #else
- const int MAXN = 3e5;
- const int MAXLOG = 20;
- const int MAXSQRT = 400;
- #define cerr if (false) cerr
- #endif
- mt19937 rng(time(0));
- #define double long double
- const int INF = 1e9;
- const int MOD = 1e9 + 7;
- int n, a, b;
- int x[MAXN];
- double v[MAXN];
- double can[MAXN];
- inline void init() {
- }
- inline void solve() {
- init();
- for (int i = 0; i < n; i++) {
- cin >> x[i] >> v[i];
- }
- can[n - 1] = v[n - 1];
- for (int i = n - 2; i >= 0; i--) {
- double s = x[i + 1] - x[i];
- double t = (-can[i + 1] + sqrtl(can[i + 1] * can[i + 1] + 2 * b * s)) / b;
- can[i] = min(v[i], can[i + 1] + b * t);
- }
- double ans = 0;
- double cur = 0;
- for (int i = 0; i < n - 1; i++) {
- double f = can[i + 1];
- double s = x[i + 1] - x[i];
- {
- double t1 = (-cur + sqrtl(cur * cur + 2 * a * s)) / a;
- if (cur + t1 * a <= f) {
- cur += t1 * a;
- ans += t1;
- continue;
- }
- }
- double A = a * a + a * b;
- double B = 2 * cur * (a + b);
- double C = -f * f - 2 * b * s - cur * cur;
- double d1 = (-B + sqrtl(B * B - 4 * A * C)) / 2 * A;
- double d2 = (-B - sqrtl(B * B - 4 * A * C)) / 2 * A;
- double d;
- if (d2 < 0) {
- d = d1;
- }
- else {
- d = d2;
- }
- double t = (cur - f + a * d) / b;
- ans += t + d;
- cur = can[i + 1];
- }
- cout << ans << '\n';
- }
- signed main() {
- #ifdef DEBUG
- freopen("A.in", "r", stdin);
- freopen("A.out", "w", stdout);
- #else
- #endif
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- while (cin >> n >> a >> b)
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement