답안 #1109203

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1109203 2024-11-06T07:58:53 Z Gourougourou Plot (POI11_wyk) C++17
0 / 100
30000 ms 5124 KB
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef pair<double,double> pll;
typedef vector<ll> vll;
typedef vector<pll> vpll;
#define x first
#define y second
const double EPS = 1e-8;


double dist(pll a, pll b) {
    return (a.x-b.x)*(a.x-b.x) + (a.y-b.y)+(a.y-b.y);
}
pair<pll,ll> maxDist(vpll v) {
    ll ans = 0;
    pll a = v[0];
    for (pll i : v) {
        for (pll j : v) {
            ll res = dist(i,j);
            if (res > ans) {
                ans = res;
                a = {(i.x+j.x)/2,(i.y+j.y)/2};
            }
        }
    }
    return {a,ans};
}

vpll ok(int n, int m, vpll v, ll k) {
    vpll ans;
    int ind = 0;
    while (ind < n) {
        int cur = ind+1, prev = cur;
        while (cur < n-1 && maxDist(vpll(v.begin()+ind,v.begin()+cur+1)).y <= 4*k) {
            prev = cur;
            cur = min(2*cur, n-1);
        }
        ll lo = prev, hi = cur;
        while (lo < hi) {
            ll mid = (lo+hi+1)/2;
            auto p = maxDist(vpll(v.begin()+ind, v.begin()+mid+1));
            if (p.y <= 4*k) lo = mid;
            else hi = mid-1;
        }
        ans.push_back(maxDist(vpll(v.begin()+ind, v.begin()+lo+1)).x);
        ind = lo+1;
    }
    return ans.size() <= m ? ans : vpll();
}

int main() {
    int n, m; cin >> n >> m;
    vpll v(n);
    for (pll &p : v) cin >> p.x >> p.y;
    double lo = 0, hi = 1e18;
    while (hi-lo > EPS) {
        double mid = (hi+lo)/2;
        if (ok(n,m,v,mid).size()) hi = mid;
        else lo = mid;
    }
    vpll ans = ok(n,m,v,hi);
    cout << fixed << setprecision(14);
    cout << sqrt(hi) << '\n';
    cout << ans.size() << '\n';
    for (pll p : ans) cout << p.x << ' ' << p.y << '\n';
}

Compilation message

wyk.cpp: In function 'vpll ok(int, int, vpll, ll)':
wyk.cpp:50:23: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<double, double> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   50 |     return ans.size() <= m ? ans : vpll();
      |            ~~~~~~~~~~~^~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 336 KB Nieprawidlowa wartosc r
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 336 KB Nieprawidlowa wartosc r
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 30096 ms 336 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 336 KB Nieprawidlowa wartosc r
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 184 ms 480 KB Nieprawidlowa wartosc r
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 30049 ms 488 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 314 ms 336 KB Nieprawidlowa wartosc r
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 30050 ms 336 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 12600 ms 736 KB Nieprawidlowa wartosc r
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 30025 ms 3412 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 30100 ms 5076 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 30042 ms 5124 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 30014 ms 5080 KB Time limit exceeded
2 Halted 0 ms 0 KB -