結果
| 問題 |
No.45 回転寿司
|
| ユーザー |
|
| 提出日時 | 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
ソースコード
# 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