結果
問題 |
No.2029 Swap Min Max Min
|
ユーザー |
![]() |
提出日時 | 2022-08-09 16:58:22 |
言語 | Ruby (3.4.1) |
結果 |
WA
|
実行時間 | - |
コード長 | 636 bytes |
コンパイル時間 | 323 ms |
コンパイル使用メモリ | 7,424 KB |
実行使用メモリ | 32,768 KB |
最終ジャッジ日時 | 2024-09-19 21:47:30 |
合計ジャッジ時間 | 9,582 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 41 WA * 1 |
コンパイルメッセージ
Syntax OK
ソースコード
N = gets.to_i A = gets.split.map(&:to_i) if N == 2 puts 0 exit end x = N / 2 pos = [] N.times do |i| a = A[i] pos << i if a <= x end if N % 2 == 0 dp = Array.new(N) { Array.new(2, Float::INFINITY) } dp[0][0] = pos[0] dp[0][1] = (pos[0] - 1).abs div = N / 2 1.upto(div - 1) do |d| cur = 2 * d + 1 v = pos[d] dp[d][0] = [dp[d - 1][0] + (cur - 1 - v).abs, dp[d - 1][1] + (cur - 1 - v).abs].min dp[d][1] = dp[d - 1][1] + (cur - v).abs end y = dp[div - 1].min puts [x, y].join(' ') else y = 0 cur = 1 pos.each do |v| y += (cur - v).abs cur += 2 end puts [x, y].join(' ') end