結果

問題 No.45 回転寿司
ユーザー gemmaro
提出日時 2020-03-21 18:17:08
言語 Ruby
(3.4.1)
結果
WA  
実行時間 -
コード長 1,543 bytes
コンパイル時間 239 ms
コンパイル使用メモリ 7,296 KB
実行使用メモリ 12,288 KB
最終ジャッジ日時 2024-12-23 06:52:06
合計ジャッジ時間 4,442 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 1 WA * 29
権限があれば一括ダウンロードができます
コンパイルメッセージ
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