Submission #1247328

#TimeUsernameProblemLanguageResultExecution timeMemory
1247328tkhoi13Mobile (BOI12_mobile)C++20
100 / 100
245 ms16800 KiB
#include <bits/stdc++.h>
#define ll long long
#define db double
#define fi first
#define se second
#define pb push_back
#define all(x) begin(x), end(x)
#define allr(x) rbegin(x), rend(x)
#define szx(x) ((int)(x).size())
#define FOR(i, a, b) for (int i = a, _b = (b); i <= _b; ++i)
#define ROF(i, a, b) for (int i = a, _b = (b); i >= _b; --i)
#define REP(i, n) for (int i = 0, _n = (n); i < _n; ++i)
#define endl '\n'

using namespace std;

void setIO(string filename = "") {
    ios::sync_with_stdio(0);
    cin.tie(0);
    if (!filename.empty()) {
        if (ifstream(filename + ".in")) {
            freopen((filename + ".in").c_str(), "r", stdin);
            freopen((filename + ".out").c_str(), "w", stdout);
        }
    }
}
int n;
int l;
vector<pair<ll, ll>> p;

bool ok(db x) {
    db cur = 0;
    REP(i, n) {
        if (abs(p[i].se) > x) continue;
        db t = sqrt(x * x - p[i].se * p[i].se);
        db a = p[i].fi - t, b = p[i].fi + t;
        if (a <= cur) cur = max(cur, b);
    }

    return cur < l;
}

void solve() {
    cin >> n >> l;
    REP(i, n) {
        ll x, y;
        cin >> x >> y;
        if (!p.empty() && p.back().fi == x) {
            if (abs(p.back().se) > abs(y)) p.back().se = y;
        } else
            p.pb({x, y});
    }

    n = szx(p);

    db l = 0, r = 1.5e9;
    while (r - l > 1e-3) {
        db m = (r + l) / 2;

        // cout << m << ' ' << ok(m) << endl;
        if (ok(m))
            l = m;
        else
            r = m;
    }

    cout << fixed << setprecision(4) << l;
}

int main() {
    setIO("socdist");
    int t = 1;
    // cin >> t;
    while (t--) solve();
}

Compilation message (stderr)

mobile.cpp: In function 'void setIO(std::string)':
mobile.cpp:22:20: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 |             freopen((filename + ".in").c_str(), "r", stdin);
      |             ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mobile.cpp:23:20: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   23 |             freopen((filename + ".out").c_str(), "w", stdout);
      |             ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...