Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- #define f first
- #define sec second
- #define mk make_pair
- #define pb push_back
- //#define int ll
- #define all(x) x.begin(), x.end()
- const int INF = 1e9 + 10;
- const int N = 2e5 + 10;
- struct st {
- ld f, t;
- int sec;
- };
- bool cmp(st a, st b) {
- return a.t < b.t || (a.t == b.t && a.sec > b.sec);
- }
- inline vector<st> unique(vector<st> &arr) {
- vector<st> res;
- res.pb(arr[0]);
- for (int i = 1; i < arr.size(); i++) {
- if (arr[i].f + arr[i].sec != res.back().f + res.back().sec) {
- res.pb(arr[i]);
- }
- }
- return res;
- }
- inline ld solve(vector<st> arr) {
- ld ans = -INF;
- sort(all(arr), cmp);
- arr = unique(arr);
- int n = arr.size();
- vector<ld> suf(n);
- suf[n - 1] = arr[n - 1].f - arr[n - 1].sec;
- for (int i = n - 2; i >= 0; i--) {
- suf[i] = min(suf[i + 1], arr[i].f - arr[i].sec);
- }
- for (int i = 0; i + 1 < arr.size(); i++) {
- ans = max(ans, suf[i + 1] - (arr[i].f + arr[i].sec));
- }
- if (ans < 0) {
- cout << -1;
- exit(0);
- }
- else {
- return ans;
- }
- }
- signed main() {
- #ifdef HOME
- freopen("input.txt", "r", stdin);
- //freopen("output.txt", "w", stdout);
- #endif
- cin.tie(0);
- cout.tie(0);
- ios_base::sync_with_stdio(0);
- ld x1, x2, y1, y2;
- cin >> x1 >> y1 >> x2 >> y2;
- if (x1 == x2) {
- int n;
- cin >> n;
- vector<st> arr(n);
- for (int i = 0; i < n; i++) {
- cin >> arr[i].f >> arr[i].sec >> arr[i].sec;
- arr[i].t = arr[i].f + arr[i].sec;
- }
- cout << fixed << setprecision(10) << solve(arr);
- }
- else if (y1 == y2) {
- int n;
- cin >> n;
- vector<st> arr(n);
- for (int i = 0; i < n; i++) {
- cin >> arr[i].f >> arr[i].f >> arr[i].sec;
- arr[i].t = arr[i].f + arr[i].sec;
- }
- cout << fixed << setprecision(10) << solve(arr);
- }
- else {
- ld k = (y2 - y1) / (x2 - x1);
- ld a = 1, b = abs(-1.0 / k), c = sqrt(a * a + b * b), d = abs(a * b / c);
- int n;
- cin >> n;
- vector<st> arr(n);
- for (int i = 0; i < n; i++) {
- ld x, y, r;
- cin >> x >> y >> r;
- arr[i].f = (y - k * x) * d;
- arr[i].sec = r;
- arr[i].t = arr[i].f + arr[i].sec;
- }
- cout << fixed << setprecision(10) << solve(arr);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement