結果
問題 |
No.3042 拡大コピー
|
ユーザー |
|
提出日時 | 2025-02-28 22:59:24 |
言語 | Rust (1.83.0 + proconio) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,401 bytes |
コンパイル時間 | 10,805 ms |
コンパイル使用メモリ | 400,748 KB |
実行使用メモリ | 31,196 KB |
最終ジャッジ日時 | 2025-03-01 07:40:48 |
合計ジャッジ時間 | 12,716 ms |
ジャッジサーバーID (参考情報) |
judge6 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 12 WA * 12 |
ソースコード
#[allow(unused_imports)] use std::{ cell::RefCell, convert::{Infallible, TryFrom, TryInto as _}, fmt::{self, Debug, Display, Formatter,}, fs::{File}, hash::{Hash, Hasher}, iter::{Product, Sum}, marker::PhantomData, ops::{Add, AddAssign, Sub, SubAssign, Div, DivAssign, Mul, MulAssign, Neg, }, str::FromStr, sync::{atomic::{self, AtomicU32, AtomicU64}, Once}, collections::{*}, mem::{swap}, cmp::{self, Reverse, Ordering, Eq, PartialEq, PartialOrd}, thread::LocalKey, f64::consts::PI, time::Instant, io::{self, stdin, Read, read_to_string, BufWriter, BufReader, stdout, Write}, }; #[allow(unused_imports)] use proconio::{input, input_interactive, marker::{*}}; #[allow(unused_imports)] //use rand::{thread_rng, Rng, seq::SliceRandom}; #[allow(unused_imports)] //use ac_library::{*}; #[allow(dead_code)] const INF: i64 = 1<<60; #[allow(dead_code)] const MOD: i64 = 998244353; #[allow(dead_code)] const D: [(usize, usize); 4] = [(1, 0), (0, 1), (!0, 0), (0, !0)]; pub fn closest_pair(ps: &mut Vec<(f64, f64)>)->f64{ ps.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap().then(a.1.partial_cmp(&b.1).unwrap())); closest_find(ps) } fn closest_find(ps: &mut [(f64, f64)])->f64{ if ps.len()<=1{ return 1e60; } let m = ps.len()/2; let center = ps[m].0; let mut res = closest_find(&mut ps[..m]); res = res.min(closest_find(&mut ps[m..])); let (mut idx1, mut idx2) = (0, 0); let mut nps = Vec::with_capacity(ps.len()); while idx1 < m || idx2+m < ps.len(){ if idx1<m && (idx2+m==ps.len()||ps[idx1].1 < ps[idx2+m].1){ nps.push(ps[idx1]); idx1 += 1; } else { nps.push(ps[idx2+m]); idx2 += 1; } } ps.copy_from_slice(&nps); let mut near: Vec<(f64, f64)> = Vec::new(); for &(x, y) in ps.iter(){ if (x-center).abs() > res{continue} for &(px, py) in near.iter().rev(){ if res+py < y{break;} let (dx, dy) = ((x-px).abs(), y-py); res = res.min((dx*dx+dy*dy).sqrt()); } near.push((x, y)); } res } //use proconio::fastout; //#[fastout] fn main(){ input!{ n: usize, mut p: [(f64, f64); n], mut q: [(f64, f64); n], } let d1 = closest_find(&mut p); let d2 = closest_find(&mut q); println!("{}", d2/d1); }