提出 #34127397
ソースコード 拡げる
use proconio::{fastout, input};
use union_find::*;
pub mod union_find {
#[derive(Debug, Clone)]
pub struct UnionFind {
par: Vec<usize>,
size: Vec<usize>,
}
impl UnionFind {
pub fn new(n: usize) -> Self {
Self {
par: vec![0; n],
size: vec![1; n],
}
}
pub fn find_root(&mut self, a: usize) -> usize {
if self.size[a] > 0 {
return a;
}
self.par[a] = self.find_root(self.par[a]);
self.par[a]
}
pub fn union(&mut self, a: usize, b: usize) -> usize {
let mut x = self.find_root(a);
let mut y = self.find_root(b);
if x == y {
return x;
}
if self.size[x] < self.size[y] {
std::mem::swap(&mut x, &mut y);
}
self.size[x] += self.size[y];
self.size[y] = 0;
self.par[y] = x;
x
}
pub fn in_same_set(&mut self, a: usize, b: usize) -> bool {
self.find_root(a) == self.find_root(b)
}
pub fn group_size(&mut self, a: usize) -> usize {
let x = self.find_root(a);
self.size[x]
}
}
}
fn f(xy: &Vec<(i64, i64)>, n: usize, r: f64) -> bool {
// n: y=-100, n+1: y=100
let mut uf = UnionFind::new(xy.len() + 2);
for i in 0..n {
let (_, y) = xy[i];
let y = y as f64;
if y - 2.0 * r < -100.0 {
uf.union(i, n);
}
if y + 2.0 * r > 100.0 {
uf.union(i, n + 1);
}
}
for i in 0..n - 1 {
let (x0, y0) = xy[i];
let x0 = x0 as f64;
let y0 = y0 as f64;
for j in i + 1..n {
let (x1, y1) = xy[j];
let x1 = x1 as f64;
let y1 = y1 as f64;
let dx = x1 - x0;
let dy = y1 - y0;
if dx * dx + dy * dy < 4.0 * r * r {
uf.union(i, j);
}
}
}
!uf.in_same_set(n, n + 1)
}
#[fastout]
fn main() {
input! {
n: usize,
xy: [(i64, i64); n],
}
// bisect
let mut l = 0.0;
let mut r = 100.0;
for _ in 0..100 {
let mid = (l + r) / 2.0;
if f(&xy, n, mid) {
l = mid;
} else {
r = mid;
}
}
println!("{}", r);
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | F - Silver Woods |
| ユーザ | matsueushi |
| 言語 | Rust (1.42.0) |
| 得点 | 600 |
| コード長 | 2428 Byte |
| 結果 | AC |
| 実行時間 | 14 ms |
| メモリ | 2212 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 600 / 600 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt |
| All | hand_01.txt, random_01_small.txt, random_02_small.txt, random_03_small.txt, random_04_small.txt, random_05_small.txt, random_06_small.txt, random_07_small.txt, random_08_small.txt, random_09_small.txt, random_10_small.txt, random_11_small.txt, random_12_small.txt, random_13_small.txt, random_14_small.txt, random_15_small.txt, random_16_large.txt, random_17_large.txt, random_18_large.txt, random_19_large.txt, random_20_large.txt, random_21_large.txt, random_22_large.txt, random_23_large.txt, random_24_large.txt, random_25_large.txt, random_26_max.txt, random_27_max.txt, random_28_max.txt, random_29_max.txt, random_30_max.txt, random_31_max.txt, random_32_max.txt, random_33_max.txt, random_34_max.txt, random_35_max.txt, random_36_max.txt, random_37_max.txt, random_38_max.txt, random_39_max.txt, random_40_max.txt, random_41_max.txt, random_42_max.txt, random_43_max.txt, random_44_max.txt, random_45_max.txt, random_46_lattice.txt, random_47_lattice.txt, random_48_lattice.txt, random_49_lattice.txt, random_50_lattice.txt, random_51_lattice.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| hand_01.txt | AC | 8 ms | 2180 KiB |
| random_01_small.txt | AC | 2 ms | 1968 KiB |
| random_02_small.txt | AC | 2 ms | 2184 KiB |
| random_03_small.txt | AC | 2 ms | 2072 KiB |
| random_04_small.txt | AC | 2 ms | 2104 KiB |
| random_05_small.txt | AC | 2 ms | 2072 KiB |
| random_06_small.txt | AC | 2 ms | 2056 KiB |
| random_07_small.txt | AC | 2 ms | 2172 KiB |
| random_08_small.txt | AC | 1 ms | 2064 KiB |
| random_09_small.txt | AC | 2 ms | 2064 KiB |
| random_10_small.txt | AC | 2 ms | 2028 KiB |
| random_11_small.txt | AC | 1 ms | 2096 KiB |
| random_12_small.txt | AC | 1 ms | 2056 KiB |
| random_13_small.txt | AC | 1 ms | 2072 KiB |
| random_14_small.txt | AC | 2 ms | 2080 KiB |
| random_15_small.txt | AC | 2 ms | 2148 KiB |
| random_16_large.txt | AC | 2 ms | 2096 KiB |
| random_17_large.txt | AC | 3 ms | 2148 KiB |
| random_18_large.txt | AC | 2 ms | 2000 KiB |
| random_19_large.txt | AC | 2 ms | 2068 KiB |
| random_20_large.txt | AC | 2 ms | 2000 KiB |
| random_21_large.txt | AC | 2 ms | 2176 KiB |
| random_22_large.txt | AC | 2 ms | 2188 KiB |
| random_23_large.txt | AC | 2 ms | 2172 KiB |
| random_24_large.txt | AC | 2 ms | 2132 KiB |
| random_25_large.txt | AC | 2 ms | 2204 KiB |
| random_26_max.txt | AC | 6 ms | 2212 KiB |
| random_27_max.txt | AC | 6 ms | 2156 KiB |
| random_28_max.txt | AC | 8 ms | 2104 KiB |
| random_29_max.txt | AC | 5 ms | 2152 KiB |
| random_30_max.txt | AC | 5 ms | 2052 KiB |
| random_31_max.txt | AC | 4 ms | 2136 KiB |
| random_32_max.txt | AC | 6 ms | 2068 KiB |
| random_33_max.txt | AC | 5 ms | 2080 KiB |
| random_34_max.txt | AC | 5 ms | 2108 KiB |
| random_35_max.txt | AC | 5 ms | 2192 KiB |
| random_36_max.txt | AC | 7 ms | 2180 KiB |
| random_37_max.txt | AC | 14 ms | 2076 KiB |
| random_38_max.txt | AC | 6 ms | 2188 KiB |
| random_39_max.txt | AC | 4 ms | 2092 KiB |
| random_40_max.txt | AC | 4 ms | 2076 KiB |
| random_41_max.txt | AC | 3 ms | 2120 KiB |
| random_42_max.txt | AC | 6 ms | 1976 KiB |
| random_43_max.txt | AC | 7 ms | 2008 KiB |
| random_44_max.txt | AC | 5 ms | 2016 KiB |
| random_45_max.txt | AC | 6 ms | 2080 KiB |
| random_46_lattice.txt | AC | 6 ms | 2096 KiB |
| random_47_lattice.txt | AC | 3 ms | 2192 KiB |
| random_48_lattice.txt | AC | 4 ms | 2068 KiB |
| random_49_lattice.txt | AC | 2 ms | 2136 KiB |
| random_50_lattice.txt | AC | 3 ms | 2104 KiB |
| random_51_lattice.txt | AC | 2 ms | 2008 KiB |
| sample_01.txt | AC | 2 ms | 2112 KiB |
| sample_02.txt | AC | 2 ms | 2000 KiB |
| sample_03.txt | AC | 2 ms | 2188 KiB |
| sample_04.txt | AC | 2 ms | 2148 KiB |