binary search ternary search *1600

Please click on ads to support us..

C++ Code:

#include <algorithm>
#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
#include <queue>

#define EPSILON 1e-7

using namespace std;

bool canMeet(vector<int> a, vector<int> v, int N, double t) {
    vector<pair<double, int>> events;
    for (int i = 0; i < N; i++) {
        events.push_back({a[i] - v[i] * t, 1});
        events.push_back({a[i] + v[i] * t, -1});
    }

    sort(events.begin(), events.end(), [](const pair<double, int>& a, const pair<double, int> &b) {
        if (abs(a.first - b.first) < EPSILON) {
            return a.second > b.second;
        } else {
            return a.first < b.first;
        }
    });

    int overlap_max = 0, overlap = 0;
    for (auto it = events.begin(); it != events.end(); it++) {
        overlap += it->second;
        overlap_max = max(overlap_max, overlap);
    }

    return overlap_max == N;
}

// https://codeforces.com/contest/782/problem/B
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    // freopen("meeting-places.in", "r", stdin);
    // freopen("meeting-places.out", "w", stdout);

    int N;
    cin >> N;
    vector<int> a(N), v(N);
    for (int i = 0; i < N; i++) {
        cin >> a[i];
    }

    for (int i = 0; i < N; i++) {
        cin >> v[i];
    }

    double low = 0;
    double high = 1e12;
    while (abs(high - low) > EPSILON) {
        double mid = low + (high - low) / 2;
        if (canMeet(a, v, N, mid)) {
            high = mid;
        } else {
            low = mid + EPSILON;
        }
    }

    size_t len = 100;
    char chs[len];
    snprintf(chs, len, "%.6f", low);
    cout << chs << endl;
 }


Comments

Submit
0 Comments
More Questions

1654A - Maximum Cake Tastiness
1649A - Game
139A - Petr and Book
1612A - Distance
520A - Pangram
124A - The number of positions
1041A - Heist
901A - Hashing Trees
1283A - Minutes Before the New Year
1654D - Potion Brewing Class
1107B - Digital root
25A - IQ test
785A - Anton and Polyhedrons
1542B - Plus and Multiply
306A - Candies
1651C - Fault-tolerant Network
870A - Search for Pretty Integers
1174A - Ehab Fails to Be Thanos
1169A - Circle Metro
780C - Andryusha and Colored Balloons
1153A - Serval and Bus
1487C - Minimum Ties
1136A - Nastya Is Reading a Book
1353B - Two Arrays And Swaps
1490E - Accidental Victory
1335A - Candies and Two Sisters
96B - Lucky Numbers (easy)
1151B - Dima and a Bad XOR
1435B - A New Technique
1633A - Div 7