ABC045 : AtCoder Beginner Contest 045 の A, B, C, D を解いた。
- A - 台形
https://atcoder.jp/contests/abc045/tasks/abc045_a
- 提出: https://atcoder.jp/contests/abc045/submissions/40106286
(a + b) * h / 2
- B - 3人でカードゲームイージー
https://atcoder.jp/contests/abc045/tasks/abc045_b
- 提出: https://atcoder.jp/contests/abc045/submissions/40106483
VecDeque
に詰め替えて単純にシミュレートすれば良い
- C - たくさんの数式
https://atcoder.jp/contests/abc045/tasks/arc061_a
- 提出: https://atcoder.jp/contests/abc045/submissions/40106723
+
を入れられる箇所はN - 1
箇所なので+
の有無を考えても2^(N-1)
通りなのですべてを試せる
- D - すぬけ君の塗り絵
https://atcoder.jp/contests/abc045/tasks/arc061_b
- 提出: https://atcoder.jp/contests/abc045/submissions/40107544
H,W <= 10^9
なのですべてのマスを単純に数えると間に合わない- 塗ったマスを走査して、その周囲に数を足していく (マスとその周囲の塗られているマスの
HashMap
で持つ) - これで列挙されるマスの個数は
10^6
に届かないので、個数ごとにまとめなおす - 答えのうち
0
は特殊で全体のマスの個数から塗られているマスを引くことで求める
use std::collections::HashMap; use proconio::input; fn main() { input! { h: usize, w: usize, n: usize, ab: [(i64, i64); n], }; let mut map = HashMap::new(); for (a, b) in ab.iter().copied() { for y in (a - 1).max(2)..=(a + 1).min(h as i64 - 1) { for x in (b - 1).max(2)..=(b + 1).min(w as i64 - 1) { *map.entry((y, x)).or_insert(0) += 1; } } } let mut ans = vec![0_usize; 10]; for count in map.values().copied() { ans[count] += 1; } ans[0] = (h - 2) * (w - 2) - map.len(); for a in ans { println!("{}", a); } }
bouzuya/tsukota 。アプリ向けのアイコンを描いた。
今日のコミット。