昨日からリングフィットアドベンチャーを再開している。フィットボクシング 2 よりも負荷が高い。
頭が痛いので寝る。
ABC151 : AtCoder Beginner Contest 151
- A - Next Alphabet
https://atcoder.jp/contests/abc151/tasks/abc151_a
- 提出: https://atcoder.jp/contests/abc151/submissions/43704873
(c as u8 + 1) as char
- B - Achieve the Goal
https://atcoder.jp/contests/abc151/tasks/abc151_b
- 提出: https://atcoder.jp/contests/abc151/submissions/43704903
SUM(A)
を先にとっておき0..=K
の値を足したときにM * N
以上になるかを調べれば良い- 除算は誤差が怖いので両辺に
N
を掛けている
- C - Welcome to AtCoder
https://atcoder.jp/contests/abc151/tasks/abc151_c
- 提出: https://atcoder.jp/contests/abc151/submissions/43704957
AC
かどうかとWA
のカウントをとれば良いAC
後にインクリメントしないとか、AC
していないWA
を無視するなどの考慮を忘れずに
- D - Maze Master
https://atcoder.jp/contests/abc151/tasks/abc151_d
- 提出: https://atcoder.jp/contests/abc151/submissions/43705077
- 適当なところからスタートして BFS で最も距離の遠い場所を求める
- 最も距離の遠いところから再度 BFS で最も距離の遠い場所を求めるとそれが答えになる (はず)
- 木の最短距離を求めるときと同じ要領で
- 嘘解法っぽいけど通っている
- E - Max-Min Sums
https://atcoder.jp/contests/abc151/tasks/abc151_e
- 提出: https://atcoder.jp/contests/abc151/submissions/43706106
- 解説 AC
- もうすこし時間をかければ解けそう
- SUM(MAX(X)) と SUM(MIN(X)) を分けて考える
- X の個数は、 A をソートしていれば A_i を MAX とする個数を i, k - 1 の二項係数で求められる、それに A_i をかければ SUM になる
- 同様に MIN を求められる
- 同じ値のときも特別な考慮なしに求められる
- F - Enclose All
https://atcoder.jp/contests/abc151/tasks/abc151_f
- 時間が足りず、未着手
use modint::ModInt1000000007 as ModInt; use proconio::input; fn main() { input! { n: usize, k: usize, mut a: [i64; n], }; let (fact, finv) = { let maxn = n; let mut fact = vec![ModInt::new(1); maxn + 1]; for i in 1..=maxn { fact[i] = fact[i - 1] * ModInt::new(i); } let mut finv = vec![ModInt::new(1); maxn + 1]; finv[maxn] = fact[maxn].inv(); for i in (1..=maxn).rev() { finv[i - 1] = finv[i] * ModInt::new(i); } (fact, finv) }; let binom = |n: usize, k: usize| -> ModInt { if n < k { ModInt::new(0) } else { fact[n] * finv[k] * finv[n - k] } }; let mut ans = ModInt::new(0); a.sort(); for (i, a_i) in a.iter().copied().enumerate() { ans += binom(i, k - 1) * a_i; } a.reverse(); for (i, a_i) in a.iter().copied().enumerate() { ans -= binom(i, k - 1) * a_i; } println!("{}", ans); } // modint
今日のコミット。