前回のコンテスト初挑戦でクソザコナメクジっぷりが露呈したのでちゃんと練習からはじめていこうと思いました。まぁ本当のことをいうと毎週Beginnerのコンテストはやってると勘違いしてページに飛んだらやってなくて、どうしたもんかなと思ってはじめたんですけどね。
今回は初歩の初歩 AtCoder Beginners Selection をやりました。とりあえずCoinsまですすめました。
Shift Onlyまではすらすら行けたけど Coins でぴたっと止まってしまいました。coinsの問題は次です。
あなたは、500 円玉を A 枚、100 円玉を B 枚、50 円玉を C 枚持っています。 これらの硬貨の中から何枚かを選び、合計金額をちょうど X 円にする方法は何通りありますか。
早くも自分の限界の予感。いろいろ迷走してscipyを使うべきなのか?とか考えた結果、あんまり時間かけてもあれだしと思って他の方の回答を見てなんとか解けました。最終的にはt次のコードのようになりました。
# 500 m500 = int(input()) # 100 m100 = int(input()) # 50 m50 = int(input()) # total x = int(input()) count = 0 for m500_count in range(m500 + 1): x1 = x - m500_count * 500 for m100_count in range(m100 + 1): x2 = x1 - m100_count * 100 if x2 >= 0 and x2 / 50 <= m50: count += 1 print(count)
1つずつ計算していってうまくいった計算結果だけをカウントしています。他の方の回答をみてなるほどわりと単純に書けるのかと感心すると共に自分の実力のなさに頭を抱えるばかりです。
Beginners Selectionはまだ半分ぐらい終わったぐらいなので残りの半分をまたあとでやろうかと思います。やりきったら過去問を解いたりして実力を養い、またBeginners Contestに再挑戦ですね。
早くクソザコナメクジを卒業したいものです。