0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

atcoder練習(2024.11.16)

Posted at

キーワード

問題

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

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

制約
1≤N≤2000
1000≤Y≤2×10
7

N は整数である。
Y は
1000 の倍数である。
入力
入力は以下の形式で標準入力から与えられる。

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

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

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

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

入力例 3
Copy
1000 1234000
出力例 3
Copy
14 27 959
この他にも多くの候補があります。

入力例 4
Copy
2000 20000000
出力例 4
Copy
2000 0 0

回答

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

flag = 0

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

if flag == 0:
  print("-1 -1 -1")

参考

備考

  • もうわかりませんでした。すみません人の参考にしました。kkakaakak様ありがとうございます。
  • 人のコードを見てみて、どうやら、このflagみたいなやつは便利なやつなようです。いろんな所で登場しています。
  • あとやっぱりゴリ押し最強!もう僕はとにかく動くならそれでいいというスタンスで行きます。計算資源なんてどうでもいい。ロジカルな解き方はお金で買えないが、計算資源はお金で買える。
  • とにかく頭で考えて、とにかく書く、それでもダメなら、人の教えをこう。真似ていじってを繰り返す。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?