2023-03-06 ABC292 の A, B, C, D, E を解いた
ABC292 : AtCoder Beginner Contest 292 の A, B, C, D, E を解いた。
- A - CAPS LOCK
https://atcoder.jp/contests/abc292/tasks/abc292_a
- 提出: https://atcoder.jp/contests/abc292/submissions/39491194
s.to_ascii_uppercase()
- B - Yellow and Red Card
https://atcoder.jp/contests/abc292/tasks/abc292_b
- 提出: https://atcoder.jp/contests/abc292/submissions/39491374
- イエローカードを +1 レッドカードを +2 でカウントして
count >= 2
で判定すると良い
- C - Four Variables
https://atcoder.jp/contests/abc292/tasks/abc292_c
- 提出: https://atcoder.jp/contests/abc292/submissions/39491820
AB + CD = N
のAB
をX
,CD
をY
とするX
を決めるとY
はO(1)
で決まるのでO(N)
で試せるX
はAB
(orCD
) なので約数で考えるとO(√N)
で全件を求められるX
(Y
) の候補 (1..=N
) について事前に約数の個数を求めておく (O(N√N)
)- あとは
1..=N
でそれを走査してX
の個数とY
の個数をかければ良い (O(N)
) - 全体では
O(N√N)
になる
- D - Unicyclic Components
https://atcoder.jp/contests/abc292/tasks/abc292_d
- 提出: https://atcoder.jp/contests/abc292/submissions/39492357
- dsu を使って連結成分ごとにして考える
- groups で連結成分ごとに走査できる
- ここで毎回 M 回繰り返すと間に合わない可能性があるので事前に頂点ごとの辺にわけておく
- group に属する頂点の辺の数を数えて、 2 で割る (頂点の始点終点で 2 回数えているため)
- 連結成分ごとで扱っているので始点・終点は共に同じ連結成分内にある
- もしも 1 つでも頂点と辺の数が一致しないものがあれば No
- 最後まで走査できれば Yes
- E - Transitivity
https://atcoder.jp/contests/abc292/tasks/abc292_e
- 提出: https://atcoder.jp/contests/abc292/submissions/39492964
- ある頂点から到達可能な各頂点に辺を貼れば良い
- 既に貼ってあるかの判定は難しいので到達可能な頂点数を数えて最後に M を引けば良い
- 各頂点から BFS などでたどって数える
- おしまい (本番でなぜ解けないのか分からない)
use std::collections::VecDeque;
use proconio::{input, marker::Usize1};
fn main() {
input! {
n: usize,
m: usize,
uv: [(Usize1, Usize1); m],
};
let mut edges = vec![vec![]; n];
for (u, v) in uv {
edges[u].push(v);
}
let mut all = 0_usize;
for start in 0..n {
let mut used = vec![false; n];
used[start] = true;
let mut count = 0_usize;
let mut deque = edges[start].iter().copied().collect::<VecDeque<usize>>();
while let Some(u) = deque.pop_front() {
if used[u] {
continue;
}
used[u] = true;
count += 1;
for v in edges[u].iter().copied() {
deque.push_back(v);
}
}
all += count;
}
let ans = all - m;
println!("{}", ans);
}
NIP-05 https://github.com/nostr-protocol/nips/blob/master/05.md に基づいて User Discovery する CLI を書いた。 bouzuya/nostr-user-discovery に置いている。明日すこし調整して改めて書く。
『 TypeScriptで学ぶ「Domain Modeling Made Functional」 』 https://architect-club.connpass.com/event/276712/ に参加した。
今日のコミット。
- nostr-user-discovery 1 commit
- rust-atcoder 1 commit