2023-07-14 RefHelper をまとめてみた / ABC163 A, B, C, D を解いた
bouzuya/tsukota で Firestore の DocumentReference や CollectionReference を生成する関数を一箇所にまとめてみた。パスの構築はミスしそうなのでパスヘルパーが欲しくなる。それと同じ考えでくくりだしてみた。 RefHelper ? かな。 withConverter
呼び出しも兼ねられるので適切な型が指定されるので良い。
ABC163 : AtCoder Beginner Contest 163
- A - Circle Pond
https://atcoder.jp/contests/abc163/tasks/abc163_a
- 提出: https://atcoder.jp/contests/abc163/submissions/43541183
2_f64 * std::f64::consts::PI * r
- B - Homework
https://atcoder.jp/contests/abc163/tasks/abc163_b
- 提出: https://atcoder.jp/contests/abc163/submissions/43541197
A
の総和をとってN
から引くN
を超えている場合は-1
を出力する
- C - management
https://atcoder.jp/contests/abc163/tasks/abc163_c
- 提出: https://atcoder.jp/contests/abc163/submissions/43541214
- 社員を頂点とし、直属の関係を辺とするグラフで考える
- 各頂点ごとのカウントをすべての辺 (
A
) を走査してつくって出力する
- D - Sum of Large Numbers
https://atcoder.jp/contests/abc163/tasks/abc163_d
- 提出: https://atcoder.jp/contests/abc163/submissions/43541755
- 当時 (2020-04-19) D が解けなかった
10^100
が大きいので選ぶ個数が違えば和が同じになることはありえない- 選ぶ個数は
K..=N+1
を取り得る - 選ぶ個数
X
を固定して考える X
個選ぶときの和の最小値は10^100 * X + SUM(0..=X-1)
になる- 同様に最大値は
10^100 * X + SUM(N + 1 - X..=N)
になる - 最小値から最大値の間は 1 ずつの調整が可能なのですべてつくることができる (当時はこれに気づけなかった)
- つまり選ぶ個数
X
につくれる和の種類は 最大値 - 最小値 + 1 個 - 選ぶ個数の取り得る範囲を走査してこれらの和を取れば良い
- E - Active Infants
https://atcoder.jp/contests/abc163/tasks/abc163_e
- 時間が足りず、未着手
- F - path pass i
https://atcoder.jp/contests/abc163/tasks/abc163_f
- 時間が足りず、未着手
use proconio::input;
fn main() {
input! {
n: usize,
k: usize,
};
let p = 1_000_000_007;
// sum of [a, b]
let f = |a: usize, b: usize| -> usize {
if a > b {
0
} else {
(a + b) * (b + 1 - a) / 2
}
};
let mut sum = 0_usize;
for x in k..=n + 1 {
let min = f(0, x - 1);
let max = f(n + 1 - x, n);
let count = max - min + 1;
sum += count;
sum %= p;
}
let ans = sum;
println!("{}", ans);
}
今日のコミット。