Submission #1137813

#TimeUsernameProblemLanguageResultExecution timeMemory
1137813KawakiMeidoMobile (BOI12_mobile)C++20
100 / 100
383 ms40724 KiB
/*Author: KawakiMeido*/ #include <bits/stdc++.h> #define pb push_back #define endl "\n" #define ll long long #define int long long #define all(x) (x).begin(),(x).end() #define pii pair<int,int> #define fi first #define se second using namespace std; /*Constants*/ const int N = 2e5+10; const int INF = 1e9+7; const long long LLINF = 1e18+3; /*TestCases*/ int test=1; void solve(); void TestCases(bool v){ if (v) cin >> test; while(test--) solve(); } /*Global Variables*/ int n; int L; vector<pii> a,v; bool check(long double delta){ long double x = 0; for (int i=0; i<(int)v.size(); i++){ if (delta<v[i].se) continue; long double sus = sqrt((long double)(delta*delta - v[i].se*v[i].se)); long double l = (long double) v[i].fi - sus; long double r = (long double) v[i].fi + sus; if (l<=x){ x = max(x,r); } } if (x>=L) return true; else return false; } /*Solution*/ void solve(){ cin >> n >> L; for (int i=1; i<=n; i++){ int x,y; cin >> x >> y; a.push_back({x,abs(y)}); } sort(all(a)); for (int i=0; i<n; i++){ // if (!v.empty() && a[i].se > v.back().se){ // int delta = min(v.back().se,a[i].se); // long double sus1 = sqrt((long double)(delta*delta - v.back().se*v.back().se)); // long double sus2 = sqrt((long double)(delta*delta - a[i].se*a[i].se)); // long double l1 = (long double) v.back().fi - sus1; // long double r1 = (long double) v.back().fi + sus1; // long double l2 = (long double) a[i].fi - sus2; // long double r2 = (long double) a[i].fi + sus2; // // if (r1>=r2) continue; // } // while (!v.empty()){ // int delta = min(v.back().se,a[i].se); // long double sus1 = sqrt((long double)(delta*delta - v.back().se*v.back().se)); // long double sus2 = sqrt((long double)(delta*delta - a[i].se*a[i].se)); // long double l1 = (long double) v.back().fi - sus1; // long double r1 = (long double) v.back().fi + sus1; // long double l2 = (long double) a[i].fi - sus2; // long double r2 = (long double) a[i].fi + sus2; // // if (l1<l2) break; // // v.pop_back(); // } v.push_back({a[i].fi,a[i].se}); } long double l = 0, r = (int) 2e9; long double ans = r; for (int i=1; i<=50; i++){ long double mid = (l+r)/2; if (check(mid)){ ans = mid; r = mid; } else{ l = mid; } } cout << fixed << setprecision(6) << ans << endl; } /*Driver Code*/ signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); TestCases(0); return 0; }
#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...