ABC051 : AtCoder Beginner Contest 051 の A, B, C, D を解いた。
- A - Haiku
https://atcoder.jp/contests/abc051/tasks/abc051_a
- 提出: https://atcoder.jp/contests/abc051/submissions/39536552
s.into_iter().map(|c| if c == ',' { ' ' } else { c }).collect::<String>()
- B - Sum of Three Integers
https://atcoder.jp/contests/abc051/tasks/abc051_b
- 提出: https://atcoder.jp/contests/abc051/submissions/39536654
O(K^3)
だと間に合わないのでX
Y
Z
の組み合わせの全探索は不可X + Y + Z = S
からX
Y
を決めればZ
も決まることが分かるX
Y
の組み合わせの全探索をして、条件を満たすものだけを数えれば間に合う
- C - Back and Forth
https://atcoder.jp/contests/abc051/tasks/abc051_c
- 提出: https://atcoder.jp/contests/abc051/submissions/39537459
- 最初
s
とt
の位置関係が固定されていることを見落として混乱していた - 実際には
s_x < t_x
s_y < t_y
の制約があることから位置関係は決まっている - 右上左下下右上上左下などの経路で最短になる
- D - Candidates of No Shortest Paths
https://atcoder.jp/contests/abc051/tasks/abc051_d
- 提出: https://atcoder.jp/contests/abc051/submissions/39538106
- ある辺が最短経路になるかどうかは
a_i
とb_i
の最短経路がc_i
かどうかで判断できる (そうでないなら他の頂点経由でより短い経路がある) - すべての頂点の間の距離を求めて↑を確かめれば良い
- ワーシャルフロイド法か各頂点からダイクストラ法などで求められる
use proconio::{input, marker::Usize1}; fn adjacency_list(n: usize, uvw: &[(usize, usize, u64)]) -> Vec<Vec<(usize, u64)>> { let mut e = vec![vec![]; n]; for (u, v, w) in uvw.iter().copied() { e[u].push((v, w)); e[v].push((u, w)); } e } fn dijkstra(n: usize, inf: u64, e: &[Vec<(usize, u64)>], s: usize) -> Vec<u64> { use std::{cmp::Reverse, collections::BinaryHeap}; let mut d = vec![inf; n]; let mut pq = BinaryHeap::new(); d[s] = 0; pq.push(Reverse((0, s))); while let Some(Reverse((w_u, u))) = pq.pop() { if w_u > d[u] { continue; } for (v, w_v) in e[u].iter().copied() { let w = w_u + w_v; if w < d[v] { d[v] = w; pq.push(Reverse((w, v))); } } } d } fn main() { input! { n: usize, m: usize, abc: [(Usize1, Usize1, u64); m], }; let edges = adjacency_list(n, &abc); let inf = 1_u64 << 60; let dist = (0..n) .map(|u| dijkstra(n, inf, &edges, u)) .collect::<Vec<Vec<u64>>>(); let mut count = 0_usize; for (a, b, c) in abc { if dist[a][b] != c { count += 1; } } let ans = count; println!("{}", ans); }
今日のコミット。
- rust-sandbox 1 commit
- rust-atcoder 1 commit