BETA

AtCoder Beginner Contest 085

投稿日:2019-07-10
最終更新:2019-07-10

問題

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

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

最初書いたコード

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

L=[[h,i,j]for h in range(N+1) for i in range(N+1) for j in range(N+1) if (h+i+j)==N and h*1000+i*5000+j*10000==Y ]  

if len(L)>0:  
  print(L[0][0],end=" ")  
  print(L[0][1],end=" ")    
  print(L[0][2])  
else:  
  print("-1 -1 -1")  

結果はTLEだった。
for3重はやはり無理だったか。
そこでj=N-h-iであることに注目してコードを書き直した。

forを一つ減らしたコード

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

L=[[h,i,N-h-i]for h in range(N+1) for i in range(N+1) if h*1000+i*5000+(N-h-i)*10000==Y and (N-h-i)>=0]  

if len(L)>0:  
  print(L[0][2],end=" ")  
  print(L[0][1],end=" ")    
  print(L[0][0])  
else:  
  print("-1 -1 -1")  
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

aocoryの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!