AtCoder Beginner Contest 150お疲れ様でした!
公式ページ
残念ながらまたUnratedですね・・・
GitHub.comのアカウントを作った記念に、ちょっと前にはじめたAtCoderのコードもコンテストが終わった後にコミットしてみました。こちら
さらに、解説記事も書いてみます。
競技プログラミングは最近はじめて言語も基本的にjavaくらいしか書けないのでjava使ってやってます。
(競プロでPythonとかC使ってる人多いのはなぜなのでしょうか・・・)
問題A
掛け算して比較する問題。
特に解説は不要かと思います。
問題B
ABCが順序通りに並んでいる数を調べる問題。
特に性能も気にしなくてもよさそうだったので、シンプルに3つとってきて一致するかどうかを調べました。
問題C
もう少しいい方法はあると思いますが・・・
自分は2つの数列を「何番目に大きい数字を使っているか」で変換し、2つの数列を比較し、桁ごとに対応する階乗の値をかけて算出しました。
あまりうまく文字で説明できません。コード見た方が分かりやすいかと思います。
問題D
最小公倍数的な問題。なぜ不正解か分かりません!
基本方針としては
- 最小公倍数算出
- 与えられたm+最小公倍数/2を最小公倍数で割り算した値を出力
で行いました。
ただ、数列が2/4/6などの場合に答えは0となります。なぜなら、「2の何乗か」というのがあっていないため。
2*(p+0.5)は2の倍数ではありませんが、4*(p+0.5)は2の倍数です。このように、数列の数全ての2の何乗かというのがそろっている必要があります。
が、不正解。この問題に苦戦していて終わりました・・・
https://github.com/ko-flavor/atcoder-java/blob/master/atcoder/src/abc/abc150/MainD.java
今日はいくら考えても分からなかったので、また後日見てみたいと思います!
(追記)
プログラムにバグを無事発見し、修正してACになりました。