某サイトの問題です。ただし、問題そのものを載せてしまうと規定に違反するので詳細は伏せます。
下記コードで目的の結果は得られています。しかし、実際にコードを走らせると時間切れになってしまいます。
どの部分が遅くなっている原因でしょうか?
どうすれば早くなりますか?お教えください。
Python3
1mono=[[300, 3], [140, 5], [200, 5]] 2a = ['ok 1 1 1', 'ok 3 4 0', 'no 1 1 1', 'ok 3 4 0', 'ok 0 0 2', 'add 1 0 0'] 3for i in range(6): 4 aa=a[i].split() 5 if aa[0]=='ok': 6 aa=aa[1:] 7 aa=[int(x) for x in aa] 8 price=0 9 err=0 10 for j in range(len(aa)): 11 if aa[j] > mono[j][1]: 12 err=1 13 if err==1: 14 print(-1) 15 else: 16 for j in range(len(aa)): 17 price=price+mono[j][0]*aa[j] 18 bread[j][1]=mono[j][1]-aa[j] 19 print(price) 20 elif aa[0]=='add': 21 aa=aa[1:] 22 aa=[int(x) for x in aa] 23 for k in range(len(aa)): 24 mono[k][1]=mono[k][1]+aa[j]
問題が分からないと回答できないと思うのですが、いかがお考えでしょうか?
「規定に違反する」のは、問題文だけですか?・・・回答を、他者に聞くには良いのですか?
ご質問ありがとうございます。
can110さん、そうですね。問題文からだいぶ離れているのでもう少し背景を記載します。
monoには3種類、それぞれ値段と個数が入力されています。
aにはある行為が6回入力されています。
行為名がOKの場合はmonoからそれぞれ記載の個数分ずつ売ります。
行為名がaddの場合は、monoにそれぞれの個数を追加します。
行為名がOKの場合は売上金priceを出力
行為名OKの注文を達成できない場合には-1を出力します。
cateyeさん、ありがとうございます。
> 回答を、他者に聞くには良いのですか?
回答を尋ねる行為も違反ですが、私はこの問題にすでに回答済み(一度しか挑戦できないため)なので大丈夫です。
前提条件がもう少し欲しいです。
1. listを足し合わせるのにsum()は利用可能でしょうか?
2. numpy等のパッケージは利用可能でしょうか?
3. monoを分解してmono_price, mono_countとするのは可能でしょうか?
yymmt様
ご質問ありがとうございます。
1. listを足し合わせるのにsum()は利用可能でしょうか?
2. numpy等のパッケージは利用可能でしょうか?
3. monoを分解してmono_price, mono_countとするのは可能でしょうか?
上記全て可能ですが、
例えば3の場合は、途中に
mono_price=[x[0] for x in mono]
のようにコードを入れる必要があります。
宜しくお願いいたします。
monoやaは与えられたものとして、自分でパースしなさいと理解しました。
そうです。宜しくお願いいたします。
回答1件
あなたの回答
tips
プレビュー