AtCoder Beginners Selection も中盤に差し掛かっている
何か書く暇もなく問題解いてた
現状がこちらとなります。このAtCoder Beginners Selectionは、過去問の中でも特に初心者学習に最適なものを10個選び揃えたものだそうで、私は今6問目に進んでいます。
他にも開発環境構築したりコンテストに初参加したりと色々下書きを溜めているのですが、何か書ききる前に書くことが出てきちゃうんですよね。
というわけで、AtCoder Beginners Selection第6問、ABC088B - Card Game for Twoをやっていきます。
ぱっと見た所感としては、多分奇数偶数を使って解く問題なんじゃないかなあ、と。
奇数番目に大きな数が書かれたカードをAliceが、偶数番目に大きな数が書かれたカードをBobが取るわけで、後はAliceが取ったカードの和からBobが取ったカードの和を引けば答えが出るのではと思いました。
というわけでそのセンでコーディングします。
しかしまあ困るのが「奇数番目/偶数番目に大きな数」というのをどう判別するかなんですよね。
とりあえず降順に並べたら何とかなるかなあ、と思いつつソートについてググったところ、私にはまだ理解の及ばないアルゴリズムが色々とあったので、速度は遅いが最も実装が容易そうなバブルソートを採用することとしました。
やたらテンプレが転がっていたのでコピペした方が早かったのですが、流石に仕組みは知っておかなければ意味がないと思い、自力でバブルソートを組むことを試みました。組めたけど一時間半かかった……。
仕組みは完全に理解したので今後はコピペします。
で、まあ降順でバブルソートできたらもう楽勝ですね。
array[0], array[2], array[4], ... ,array[2n]
の配列に格納されている値がAliceの取るカードの値、
array[1], array[3], array[5], ... ,array[2n+1]
奇数の配列に格納されている値がBobの値となります。
で、あとはsumって引くだけです。
こんな感じで。
対戦ありがとうございました!!!!!!!!!!バブルソートに時間食われすぎたね!!!!!!!!!
コメント
コメントを投稿