結果
問題 | No.2375 watasou and hibit's baseball |
ユーザー |
|
提出日時 | 2023-07-07 23:27:14 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 80 ms / 2,000 ms |
コード長 | 3,400 bytes |
コンパイル時間 | 14,832 ms |
コンパイル使用メモリ | 394,056 KB |
実行使用メモリ | 15,232 KB |
最終ジャッジ日時 | 2024-07-21 19:50:40 |
合計ジャッジ時間 | 15,048 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 36 |
ソースコード
pub mod scanner {pub struct Scanner {buf: Vec<String>,}impl Scanner {pub fn new() -> Self {Self { buf: vec![] }}pub fn new_from(source: &str) -> Self {let source = String::from(source);let buf = Self::split(source);Self { buf }}pub fn next<T: std::str::FromStr>(&mut self) -> T {loop {if let Some(x) = self.buf.pop() {return x.parse().ok().expect("");}let mut source = String::new();std::io::stdin().read_line(&mut source).expect("");self.buf = Self::split(source);}}fn split(source: String) -> Vec<String> {source.split_whitespace().rev().map(String::from).collect::<Vec<_>>()}}}use crate::scanner::Scanner;use std::io::Write;macro_rules! mdvec {($elem:expr; $n:expr) => (vec![$elem; $n]);($elem:expr; $n:expr $(; $ns:expr)+) => (vec![mdvec![$elem $(; $ns)*]; $n]);}fn main() {let mut scanner = Scanner::new();let out = std::io::stdout();let mut out = std::io::BufWriter::new(out.lock());let t: usize = 1;for _ in 0..t {solve(&mut scanner, &mut out);}}fn solve(scanner: &mut Scanner, out: &mut std::io::BufWriter<std::io::StdoutLock>) {let n: usize = scanner.next();let a: isize = scanner.next();let b: isize = scanner.next();let xyk = (0..n).map(|_| {(scanner.next::<isize>(),scanner.next::<isize>(),scanner.next::<isize>(),)}).collect::<Vec<_>>();let dist = |i: usize, j: usize| -> isize {let (xi, yi, _) = xyk[i];let (xj, yj, _) = xyk[j];(xi - xj).abs() + (yi - yj).abs()};let ok = |i1: usize, i2: usize, i3: usize| -> bool {let (_, _, k2) = xyk[i2];let (_, _, k3) = xyk[i3];let mut res = false;res |= b <= (k2 - k3).abs();res |= a <= dist(i3, i2) + dist(i3, i1);res};let mut dp = mdvec!(false; 1 << n; n; n);let mut ans = 1;for i in 0..n {for j in 0..n {if i == j {continue;}if a <= dist(i, j) || b <= (xyk[i].2 - xyk[j].2).abs() {dp[(1 << i) | (1 << j)][i][j] = true;ans = 2;}}}for bits in 0..(1 << n) {for i in 0..n {if ((bits >> i) & 1) == 0 {continue;}for j in 0..n {if i == j || ((bits >> j) & 1) == 0 {continue;}if !dp[bits][i][j] {continue;}for k in 0..n {if ((bits >> k) & 1) == 1 {continue;}if ok(i, j, k) {let next = bits | (1 << k);dp[next][j][k] = true;ans = ans.max(next.count_ones());}}}}}writeln!(out, "{}", ans).unwrap();}