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 |
|
|
| 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 |