結果

問題 No.3397 Max Weighted Floor of Linear
コンテスト
ユーザー Mizar
提出日時 2025-11-28 23:09:05
言語 Ruby
(4.0.2)
コンパイル:
ruby -w -c _filename_
実行:
ruby _filename_
結果
AC  
実行時間 1,555 ms / 2,000 ms
+ 580µs
コード長 958 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 522 ms
コンパイル使用メモリ 8,576 KB
実行使用メモリ 14,464 KB
最終ジャッジ日時 2026-07-18 13:04:53
合計ジャッジ時間 21,628 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 23
権限があれば一括ダウンロードができます
コンパイルメッセージ
Syntax OK

ソースコード

diff #
raw source code

#!/usr/bin/env ruby

def mwf(l, r, m, a, b, c, d)
    n = r - l
    qc0, rc0 = c.divmod(m)
    c = rc0
    a += b * qc0
    qd0, rd0 = d.divmod(m)
    d = rd0
    sum_acc = a * l + b * qd0
    max_acc = sum_acc
    loop do
        n -= 1
        y_max = (c * n + d) / m
        max_acc = [max_acc, sum_acc].max
        t = sum_acc + a * n + b * y_max
        max_acc = [max_acc, t].max
        if (a <= 0 && b <= 0) || (a >= 0 && b >= 0) || y_max == 0
            return max_acc
        end
        if a < 0
            sum_acc += a + b
        end
        n = y_max
        d = m - d - 1
        m, c, a, b = c, m, b, a
        qc, c = c.divmod(m)
        a += b * qc
        qd, d = d.divmod(m)
        sum_acc += b * qd
    end
end


def solve
    t = STDIN.readline.to_i
    t.times do
        n, m, a, b, c, d = STDIN.readline.split.map(&:to_i)
        result = mwf(0, n, m, a, b, c, d)
        puts result
    end
end


if __FILE__ == $0
    solve
end
0