結果

問題 No.45 回転寿司
ユーザー gemmarogemmaro
提出日時 2020-03-21 18:17:08
言語 Ruby
(3.3.0)
結果
WA  
実行時間 -
コード長 1,543 bytes
コンパイル時間 352 ms
コンパイル使用メモリ 11,252 KB
実行使用メモリ 15,536 KB
最終ジャッジ日時 2023-08-24 20:59:00
合計ジャッジ時間 5,293 ms
ジャッジサーバーID
(参考情報)
judge15 / judge12
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 WA -
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 AC 79 ms
15,216 KB
testcase_23 AC 78 ms
15,064 KB
testcase_24 AC 79 ms
15,024 KB
testcase_25 AC 78 ms
15,160 KB
testcase_26 WA -
testcase_27 WA -
testcase_28 WA -
testcase_29 WA -
testcase_30 WA -
testcase_31 WA -
testcase_32 AC 79 ms
15,140 KB
testcase_33 WA -
権限があれば一括ダウンロードができます
コンパイルメッセージ
Syntax OK

ソースコード

diff #

# frozen_string_literal: true

# array extension
class Array
  # rubocop:todo Metrics/MethodLength
  def delete_neighbors(idx) # rubocop:todo Metrics/AbcSize
    if size <= 2
      clear
    elsif idx.zero?
      delete_at(0)
      delete_at(0)
    elsif last == idx
      delete_at(-1)
      delete_at(-1)
    else
      delete_at(idx - 1)
      delete_at(idx - 1)
      delete_at(idx - 1)
    end
    self
  end
  # rubocop:enable Metrics/MethodLength
end

N = gets.to_i
VS = gets.chomp.split.map(&:to_i)

takes = []
available = N.times.to_a

guard = 0
loop do # rubocop:todo Metrics/BlockLength
  guard += 1
  max = available.map { |idx| VS[idx] }.max
  max_indexes = available.select { |idx| VS[idx] == max }
  if max_indexes.size == 1
    index = max_indexes.first
    takes << index
    available = available.delete_neighbors(index)
  else
    tmp = max_indexes.each_cons(2).to_a
    tmp.each do |l, r|
      if l + 1 == r
        if l.zero?
          takes << l
          available = available.delete_neighbors(l)
        elsif r == available.size - 1
          takes << r
          available = available.delete_neighbors(r)
        elsif VS[l - 1] < VS[r + 1]
          takes << l
          available = available.delete_neighbors(l)
        else
          takes << r
          available = available.delete_neighbors(r)
        end
      else
        takes << l
        available = available.delete_neighbors(l)
      end
    end
  end
  break if available.empty? || guard > 10
end

RESULT = takes.map { |idx| VS[idx] }.sum

puts RESULT
0