結果
問題 | No.2382 Amidakuji M |
ユーザー |
![]() |
提出日時 | 2023-07-19 10:58:51 |
言語 | Ruby (3.4.1) |
結果 |
AC
|
実行時間 | 508 ms / 2,000 ms |
コード長 | 1,230 bytes |
コンパイル時間 | 69 ms |
コンパイル使用メモリ | 7,296 KB |
実行使用メモリ | 26,752 KB |
最終ジャッジ日時 | 2024-09-19 09:37:39 |
合計ジャッジ時間 | 6,663 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
コンパイルメッセージ
Main.rb:59: warning: ambiguous first argument; put parentheses or a space even after `-' operator Syntax OK
ソースコード
class BinaryIndexTreedef initialize(size, init: 0)@values = Array.new(size, init)@size = sizeend# @param idx [Integer]# @param x [Numeric]def add(idx, x)raise 'Out of range reference' if @size <= idxidx += 1while idx <= @size@values[idx - 1] += xidx += idx & -idxendenddef sum(l, r)_sum(r) - _sum(l)endprivatedef _sum(idx)res = 0while idx > 0res += @values[idx - 1]idx -= idx & -idxendresendendclass Arraydef inversion_numbern = sizebit = BinaryIndexTree.new(n + 1)cnt = 0n.times do |i|cnt += i - bit.sum(0, self[i])bit.add(self[i], 1)endcntendendN, M = gets.split.map(&:to_i)P = gets.split.map(&:to_i)num = P.inversion_numberif M.even? && num.odd?puts -1elsif num == 0puts 0elseif M.even?k = (num + M - 1) / Mputs k * Melsediff = (M - num).absif num <= Mif diff.even?puts Melseputs 2 * Mendelsek = (diff + M - 1) / Mn_diff = (k * M - num).absif n_diff.even?puts k * Melseputs (k + 1) * Mendendendend