Submission #34512166


Source Code Expand

#include <bits/extc++.h>
#include <atcoder/fenwicktree>

int main(){
    using namespace std;
    unsigned long N, K;
    cin >> N >> K;
    cout << fixed << setprecision(15);

    using real = double;
    const real pi_half{1.5707963267948966192313216916397514420985846996876};
    const real pi{3.1415926535897932384626433832795028841971693993751};
    const real pi_triple_half{4.7123889803846898576939650749192543262957540990627};
    const real pi_2{6.2831853071795864769252867665590057683943387987502};
    vector<tuple<real, long, long, long>> lines(N);
    for(auto&& [theta, A, B, C] : lines){
        cin >> A >> B >> C;
        if(C > 0){
            A *= -1;
            B *= -1;
            C *= -1;
        }
        const auto d{sqrt(A * A + B * B)};
        if(B > 0){
            if(-B < A && A < B){
                const auto cos_theta{A / d};
                theta = pi_half - asin(cos_theta);
            }else{
                const auto sin_theta{B / d};
                theta = A > 0 ? asin(sin_theta) : pi - asin(sin_theta);
            }
        }else{
            if(B < A && A < -B){
                const auto cos_theta{A / d};
                theta = pi_triple_half + asin(cos_theta);
            }else{
                const auto sin_theta{B / d};
                theta = A > 0 ? pi_2 + asin(sin_theta) : pi - asin(sin_theta);
            }
        }
    }
    sort(begin(lines), end(lines));

    auto check{[&K, &pi_2, &pi_half, &lines](const auto& r_sq){
        vector<tuple<real, unsigned long, unsigned long>> intersections;
        unsigned long line_idx{};
        for(const auto& [theta, A, B, C] : lines)if(0 <= copysign(1, fma(r_sq, A * A + B * B, -C * C))){
            const real phi{0 <= copysign(1, fma(r_sq, A * A + B * B, -2 * C * C)) ? pi_half - asin(sqrt(C * C / r_sq / (A * A + B * B))) : asin(sqrt(1 - C * C / r_sq / (A * A + B * B)))};
            const real angle_0{theta + phi <= pi_2 ? theta + phi : theta + phi - pi_2}, angle_1{theta - phi >= 0 ? theta - phi : theta - phi + pi_2};
            intersections.emplace_back(angle_0, angle_0 <= angle_1, line_idx);
            intersections.emplace_back(angle_1, angle_0 > angle_1, line_idx);
            ++line_idx;
        }
        sort(begin(intersections), end(intersections));

        vector<pair<unsigned long, unsigned long>> segments(size(intersections) / 2);
        unsigned long intersection_idx{};
        for(const auto& [agl, t, i] : intersections)(t ? segments[i].second : segments[i].first) = intersection_idx++;
        sort(begin(segments), end(segments));
        atcoder::fenwick_tree<unsigned long> binary_indexed_tree(size(intersections));
        unsigned long ans{};
        for(const auto [r, l] : segments){
            ans += binary_indexed_tree.sum(0, l);
            binary_indexed_tree.add(l, 1);
            binary_indexed_tree.add(r, ~0UL);
        }
        return ans < K;
    }};

    cout << fixed << setprecision(15);
    constexpr unsigned long nibutan_iter{18};
    if(check(1.0)){
        double L_sq{1}, R_sq{7984010000000}; // (N, K) = (2, 1), [(A, B, C)] = [(-1000, -999, 1000), (999, 998, 1000)] -> ans = √7984010000000
        for(unsigned long iter{}; iter < nibutan_iter; ++iter){
            const double M{sqrt(L_sq * R_sq)};
            (check(M) ? L_sq : R_sq) = M;
        }
        cout << sqrt(L_sq) << endl;
    }else{
        double L_sq{0}, R_sq{1};
        for(unsigned long iter{}; iter < nibutan_iter; ++iter){
            const double M{(L_sq + R_sq + 2 * sqrt(L_sq) * sqrt(R_sq)) / 4};
            (check(M) ? L_sq : R_sq) = M;
        }
        cout << sqrt(L_sq) << endl;
    }

    return 0;
}

Submission Info

Submission Time
Task Ex - Intersection 2
User MMNMM
Language C++ (GCC 9.2.1)
Score 600
Code Size 3665 Byte
Status AC
Exec Time 320 ms
Memory 10900 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 2
AC × 52
Set Name Test Cases
Sample example_00.txt, example_01.txt
All example_00.txt, example_01.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt
Case Name Status Exec Time Memory
example_00.txt AC 8 ms 3884 KiB
example_01.txt AC 2 ms 4080 KiB
test_00.txt AC 265 ms 9908 KiB
test_01.txt AC 19 ms 4272 KiB
test_02.txt AC 78 ms 5252 KiB
test_03.txt AC 80 ms 5252 KiB
test_04.txt AC 127 ms 7036 KiB
test_05.txt AC 164 ms 8160 KiB
test_06.txt AC 184 ms 7500 KiB
test_07.txt AC 19 ms 4536 KiB
test_08.txt AC 83 ms 5484 KiB
test_09.txt AC 69 ms 5376 KiB
test_10.txt AC 2 ms 3992 KiB
test_11.txt AC 8 ms 4076 KiB
test_12.txt AC 2 ms 4000 KiB
test_13.txt AC 2 ms 3956 KiB
test_14.txt AC 2 ms 3860 KiB
test_15.txt AC 2 ms 3808 KiB
test_16.txt AC 2 ms 3808 KiB
test_17.txt AC 3 ms 4060 KiB
test_18.txt AC 2 ms 3996 KiB
test_19.txt AC 2 ms 3872 KiB
test_20.txt AC 306 ms 10840 KiB
test_21.txt AC 105 ms 8452 KiB
test_22.txt AC 320 ms 10648 KiB
test_23.txt AC 307 ms 10728 KiB
test_24.txt AC 298 ms 10848 KiB
test_25.txt AC 266 ms 10716 KiB
test_26.txt AC 267 ms 10644 KiB
test_27.txt AC 270 ms 10900 KiB
test_28.txt AC 269 ms 10840 KiB
test_29.txt AC 266 ms 10648 KiB
test_30.txt AC 68 ms 8512 KiB
test_31.txt AC 69 ms 8256 KiB
test_32.txt AC 67 ms 8444 KiB
test_33.txt AC 26 ms 4392 KiB
test_34.txt AC 149 ms 7404 KiB
test_35.txt AC 62 ms 5316 KiB
test_36.txt AC 91 ms 6464 KiB
test_37.txt AC 51 ms 5084 KiB
test_38.txt AC 214 ms 10040 KiB
test_39.txt AC 222 ms 10124 KiB
test_40.txt AC 69 ms 5340 KiB
test_41.txt AC 218 ms 10112 KiB
test_42.txt AC 259 ms 10900 KiB
test_43.txt AC 264 ms 10852 KiB
test_44.txt AC 263 ms 10788 KiB
test_45.txt AC 2 ms 3860 KiB
test_46.txt AC 3 ms 3884 KiB
test_47.txt AC 2 ms 3888 KiB
test_48.txt AC 2 ms 3816 KiB
test_49.txt AC 2 ms 3868 KiB