Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <sstream>
- #include <iomanip>
- #include <cstdio>
- #include <cstdlib>
- #include <cmath>
- #include <cctype>
- #include <cstring>
- #include <vector>
- #include <list>
- #include <queue>
- #include <deque>
- #include <stack>
- #include <map>
- #include <set>
- #include <algorithm>
- #include <iterator>
- #include <bitset>
- #include <ctime>
- #include<unordered_set>
- #include<complex>
- using namespace std;
- #define FOR(i,a,b) for (int i = (a); i < (b); i++)
- #define RFOR(i,b,a) for (int i = (b)-1; i >= (a); i--)
- #define ITER(it,a) for (__typeof(a.begin()) it = a.begin(); it != a.end(); it++)
- #define FILL(a,value) memset(a, value, sizeof(a))
- #define SZ(a) (int)a.size()
- #define ALL(a) a.begin(), a.end()
- #define PB push_back
- #define MP make_pair
- typedef long long LL;
- typedef unsigned long long ULL;
- typedef vector<int> VI;
- typedef pair<int, int> PII;
- const double PI = acos(-1.0);
- const int INF = 1000 * 1000 * 1000 + 7;
- const LL LINF = INF * (LL)INF;
- const int MOD = 1000 * 1000 * 1000 + 7;
- const int MAX = 1000 * 100 + 47;
- double x[MAX];
- double v[MAX];
- double t[MAX];
- int n;
- double s;
- double getTime(int c)
- {
- double time1 = LINF;
- FOR(i, 0, n)
- {
- if (t[i] == 1)
- {
- if (x[i] <= c)
- {
- double d = (v[i] * c - s * x[i]) / (v[i] - s);
- double temp = x[i] / v[i];
- if (d > 0)
- {
- temp = (c - d) / s + d / (s + v[i]);
- }
- time1 = min(time1, temp);
- }
- else
- {
- time1 = min(time1, x[i] / v[i]);
- }
- }
- }
- double time2 = LINF;
- FOR(i, 0, n)
- {
- if (t[i] == 2)
- {
- if (x[i] >= c)
- {
- double d = (v[i] * c - s * x[i]) / (v[i] - s);
- double temp = (1000 * 1000 - x[i]) / v[i];
- if (d < 1000 * 1000)
- {
- temp = (c - d) / s + (1000 * 1000 - d) / (s + v[i]);
- }
- time2 = min(time1, temp);
- }
- else
- {
- time2 = min(time2, (1000 * 1000 - x[i]) / v[i]);
- }
- }
- }
- return max(time1, time2);
- }
- int main()
- {
- //freopen("in.txt", "r", stdin);
- ios::sync_with_stdio(false); cin.tie(0);
- cin >> n >> s;
- double minn = INF, maxx = 0;
- FOR(i, 0, n)
- {
- cin >> x[i] >> v[i] >> t[i];
- if (t[i] == 1)
- {
- minn = min(x[i], minn);
- }
- else
- {
- maxx = max(maxx, x[i]);
- }
- }
- //cout << minn << " " << maxx << endl;
- double l = 0, r = 1000 * 1000;
- FOR(i, 0, 100)
- {
- double l1 = l + (r - l) / 3;
- double r1 = l + 2 * (r - l) / 3;
- if (getTime(l1) > getTime(r1))
- {
- l = l1;
- }
- else
- {
- r = r1;
- }
- }
- cout << fixed << setprecision(9) << min(getTime(l), getTime(10000000)) << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement