2023-02-03 ABC085 の A, B, C, D を解いた
ABC085 : AtCoder Beginner Contest 085 の A, B, C, D を解いた。
- A - Already 2018
https://atcoder.jp/contests/abc085/tasks/abc085_a
- 提出: https://atcoder.jp/contests/abc085/submissions/38573476
s[3] = '8';して出力すれば良い
- B - Kagami Mochi
https://atcoder.jp/contests/abc085/tasks/abc085_b
- 提出: https://atcoder.jp/contests/abc085/submissions/38573522
d.into_iter().collect::<HashSet<_>>().len()- 並び替えて重複を排除して長さを返す
- よく考えたら並べ替える必要はないので HashSet に入れておしまい
- C - Otoshidama
https://atcoder.jp/contests/abc085/tasks/abc085_c
- 提出: https://atcoder.jp/contests/abc085/submissions/38573615
N <= 2000なので全探索するとO(N^3)で間に合わないx + y + z = Nなので、xとyが決まればzも決まる- これで
O(N^2)で間に合う - あとはそれらのすべての組み合わせを試せば良い
- D - Katana Thrower
https://atcoder.jp/contests/abc085/tasks/abc085_d
- 提出: https://atcoder.jp/contests/abc085/submissions/38573781
a_iだけで考えると、何回でも振れるのでa_iのうち最大のものを振り続ければ良く、それ以外のa_iは不要- 最大の
a_iをmax_aとする b_iのうちb_i <= max_aであればmax_aを振るほうが良いのでb_i > max_a以外のb_iは不要b_iは 1 度しか振れないので降順に 1 回ずつ振っていくH以上になればそこで振った数を表示して終わる- すべてを振っても
H以上にならなければ、あとはmax_aを振る - このときループではなく切り上げで計算することに注意 (
max_a = 1でb_i = 1でH <= 10^9のような場合に間に合わなくなる)
use proconio::input;
fn main() {
input! {
n: usize,
h: usize,
ab: [(usize, usize); n],
};
let max_a = ab.iter().copied().map(|(a, _)| a).max().unwrap();
let mut bs = ab
.iter()
.copied()
.filter(|&(_, b)| b > max_a)
.map(|(_, b)| b)
.collect::<Vec<usize>>();
bs.sort();
let mut count = 0_usize;
let mut sum = 0_usize;
for b in bs.into_iter().rev() {
count += 1;
sum += b;
if sum >= h {
println!("{}", count);
return;
}
}
let ans = count + (((h - sum) + max_a - 1) / max_a);
println!("{}", ans);
}
Rustオープン社内勉強会 初心者歓迎 覗き見OK! https://nifty.connpass.com/event/273207/ に参加した。
予備の Corne Chocolate を買った。散財。
お好み焼きを食べた。
今日のコミット。
- rust-sandbox 1 commit
- rust-atcoder 1 commit