2023-10-03 体調が悪い / ABC321 A, B, C, D, E
体調が悪い。子どもが熱を出しているので家庭保育のために休んでいたのだけどむしろぼくの体調が悪い。昼間子どもは家でぴょんぴょんしているし、それをとめているぼくの側が疲れていた。
サントリープログラミングコンテスト2023(AtCoder Beginner Contest 321)
- A - 321-like Checker
https://atcoder.jp/contests/abc321/tasks/abc321_a
- 提出: https://atcoder.jp/contests/abc321/submissions/46171961
- 狭義単調減少になっているかを調べる
- 一つ前の要素より小さいことを確認してすべてが条件を満たしていれば Yes
- B - Cutoff
https://atcoder.jp/contests/abc321/tasks/abc321_b
- 提出: https://atcoder.jp/contests/abc321/submissions/46171972
- N ラウンド目として
0..=100
を試せば良い - ソートして最小・最大を抜いて和を求めても間に合う
- C - 321-like Searcher
https://atcoder.jp/contests/abc321/tasks/abc321_c
- 提出: https://atcoder.jp/contests/abc321/submissions/46172003
9876543210
から任意の個数の文字列を抜いたもの- 10 文字なので 2^10 = 1024 個しかない
- bit 全探索ですべてのパターンを BTreeSet に入れて K 番目を返せば答えになる
- D - Set Menu
https://atcoder.jp/contests/abc321/tasks/abc321_d
- 提出: https://atcoder.jp/contests/abc321/submissions/46172028
- 副菜をソートしておけば
B_j < P - A_i
はA_i + B_j
それ以外はP
になり、それはどこか一箇所で切り替わるのであとは個数を掛けるなどして計算すれば良い O(NlogM)
なので間に合う
- E - Complete Binary Tree
https://atcoder.jp/contests/abc321/tasks/abc321_e
- 提出: https://atcoder.jp/contests/abc321/submissions/46172261
- 解説 AC
- ある要素から K 下がったときの個数を求める
- ある要素から 1 個上がって K - 1 下がったときの個数……と求めていく
- 二分木の深さはたかだか logN なので問題ない
- 上がるだけで終わるものやルートなどの扱いに注意する
- 自力で解くのは厳しそうだった
- F - #(subset sum = K) with Add and Erase
https://atcoder.jp/contests/abc321/tasks/abc321_f
- 未着手
- G - Electric Circuit
https://atcoder.jp/contests/abc321/tasks/abc321_g
- 未着手
use proconio::input;
/// x から k 下がった深さの個数を求める
fn g(n: usize, x: usize, k: usize) -> usize {
if x > n {
return 0;
}
let (mut l, mut r) = (x, x);
for _ in 0..k {
l *= 2;
r = r * 2 + 1;
if l > n {
return 0;
}
}
r = r.min(n);
r + 1 - l
}
fn f(n: usize, mut x: usize, mut k: usize) -> usize {
// 下がるだけ
let mut sum = g(n, x, k);
// 1つ上がってから下がる
while x > 1 && k >= 2 {
sum += g(n, x ^ 1, k - 2);
k -= 1;
x /= 2;
}
// 1つ上がるだけ
if x != 1 && k == 1 {
sum += 1;
}
sum
}
fn main() {
input! {
t: usize,
nxk: [(usize, usize, usize); t],
}
for (n, x, k) in nxk {
let ans = f(n, x, k);
println!("{}", ans);
}
}
今日のコミット。
- kireta 1 commit
- rust-atcoder 1 commit