前提・実現したいこと
ABC127-D
AtCoderのABC-D問題です。
他の方が書かれたコードや解説を参考にコードを修正しましたが、
7つ目のテスト項目においてTLEになってしまいます。
実行時間を短縮するために、下記のコードで修正できる箇所はありますでしょうか。
該当のソースコード
Ruby
1N,M=gets.chomp.split.map(&:to_i) 2A=gets.chomp.split.map(&:to_i) 3c=M.times.map { gets.split.map(&:to_i) } 4c.sort_by!{|i,j| j }.reverse! 5A.sort! 6 7M.times do |i| 8 next if A[0]>c[i][1] 9 c[i][0].times do |j| 10 break if A[0]>c[i][1] 11 A.shift() 12 A.push(c[i][1]) 13 end 14end 15puts A.inject(:+) 16
修正したコード
Ruby
1N,M=gets.chomp.split.map(&:to_i) 2A=gets.chomp.split.map(&:to_i) 3c=M.times.map { gets.split.map(&:to_i) } 4c.sort_by!{|i,j| j }.reverse! 5A.sort! 6sum=0 7M.times do |i| 8 break if A[0]>c[i][1] 9 b = 0 10 c[i][0].times do |j| 11 break if A[j]>c[i][1] 12 b += 1 13 end 14 A.shift(b) 15 sum += c[i][1]*b 16end 17puts (A.inject(:+)+sum)
修正したコード2
Ruby
1N,M=gets.chomp.split.map(&:to_i) 2A=gets.chomp.split.map(&:to_i) 3c=M.times.map { gets.split.map(&:to_i) } 4c.sort_by!{|i,j| j }.reverse! 5A.sort! 6sum=0 7M.times do |i| 8 break if A.empty? || A[0]>c[i][1] 9 b = 0 10 c[i][0].times do |j| 11 break if A[j]>c[i][1] 12 b += 1 13 end 14 A.shift(b) 15 sum += c[i][1]*b 16end 17if A.empty? then 18 puts sum 19else 20 puts (A.inject(:+)+sum) 21end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/25 21:22
2019/05/28 01:46
2019/05/28 05:03
2019/05/28 11:58
2019/05/28 12:08
2019/05/28 13:08
2019/05/28 13:34
2019/05/28 13:44