AtCoder Beginners Selection ABC085C – Otoshidamaをpythonで解いてみた

本サイトABC085C – Otoshidamaへは以下から

問題:Otoshidama

日本でよく使われる紙幣は、10000 円札、5000 円札、1000 円札です。以下、「お札」とはこれらのみを指します。

青橋くんが言うには、彼が祖父から受け取ったお年玉袋にはお札が N 枚入っていて、合計で Y 円だったそうですが、嘘かもしれません。このような状況がありうるか判定し、ありうる場合はお年玉袋の中身の候補を一つ見つけてください。なお、彼の祖父は十分裕福であり、お年玉袋は十分大きかったものとします。

  • 1≤N≤2000
  • 1000≤Y≤2×107
  • N は整数である。
  • Y は 1000 の倍数である。

入力

入力は以下の形式で標準入力から与えられる。

N Y

出力

N 枚のお札の合計金額が Y 円となることがありえない場合は、-1 -1 -1 と出力せよ。

N 枚のお札の合計金額が Y 円となることがありうる場合は、そのような N 枚のお札の組み合わせの一例を「10000 円札 x 枚、5000 円札 y 枚、1000 円札 z 枚」として、x、y、z を空白で区切って出力せよ。複数の可能性が考えられるときは、そのうちどれを出力してもよい。

入力例 1

9 45000

出力例 1

4 0 5

お年玉袋に 10000 円札 4 枚と 1000 円札 5 枚が入っていれば、合計枚数が 9 枚、合計金額が 45000 円になります。5000 円札 9 枚という可能性も考えられるため、0 9 0 も正しい出力です。

入力例 2

20 196000

出力例 2

-1 -1 -1

合計枚数が 20 枚の場合、すべてが 10000 円札であれば合計金額は 200000 円になり、そうでなければ 195000 円以下になるため、196000 円という合計金額はありえません。

入力例 3

1000 1234000

出力例 3

14 27 959

この他にも多くの候補があります。

入力例 4

2000 20000000

出力例 4

2000 0 0

解答例

N, Y = map(int, input().split())

for x in range(N+1):
    for y in range(N+1-x):
        z = N - x - y
        if 10000*x + 5000*y + 1000*z == Y:
            print(x, y, z)
            exit()

print(-1, -1, -1)

解説

この問題は、与えられた条件(お札の枚数と合計金額)に基づいて、10000円札、5000円札、1000円札の組み合わせを見つけることを求めています。

  • 入力の受け取り:
    • map(int, input().split())を使用して、整数N(お札の枚数)とY(合計金額)を受け取ります。
  • 組み合わせの探索:
    • 3重のforループを使用して、10000円札、5000円札、1000円札のすべての可能な組み合わせを探索します。
    • 各組み合わせに対して、合計金額がYに等しいかどうかを確認します。
    • 合計金額がYに等しい組み合わせを見つけた場合、その組み合わせを出力して終了します。
  • 結果の出力:
    • 適切な組み合わせが見つかった場合、その組み合わせを出力します。
    • そうでない場合、-1 -1 -1を出力します。

以下は、このアプローチを実装したPythonのコードです。

# 入力の受け取り
N, Y = map(int, input().split())

# 組み合わせの探索
for x in range(N+1):
    for y in range(N+1-x):
        z = N - x - y
        if 10000*x + 5000*y + 1000*z == Y:
            print(x, y, z)
            exit()

# 適切な組み合わせが見つからなかった場合の出力
print(-1, -1, -1)

次の問題へ

前の問題へ

一覧へ

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

雇われのシステムエンジニアです。
普段は車載ECUのセキュリティー分野に従事しております。

■保有資格
Salesforce 認定 Platform アプリケーションビルダー
Salesforce 認定 Platform デベロッパー

コメント

コメントする

目次