結果

問題 No.2452 Incline
ユーザー vwxyzvwxyz
提出日時 2023-09-13 04:32:06
言語 Python3
(3.12.2 + numpy 1.26.4 + scipy 1.12.0)
結果
AC  
実行時間 614 ms / 2,000 ms
コード長 931 bytes
コンパイル時間 87 ms
コンパイル使用メモリ 11,072 KB
実行使用メモリ 8,336 KB
最終ジャッジ日時 2023-09-13 04:32:15
合計ジャッジ時間 5,175 ms
ジャッジサーバーID
(参考情報)
judge15 / judge12
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 15 ms
7,748 KB
testcase_01 AC 14 ms
7,788 KB
testcase_02 AC 15 ms
7,868 KB
testcase_03 AC 587 ms
8,288 KB
testcase_04 AC 614 ms
8,292 KB
testcase_05 AC 580 ms
8,180 KB
testcase_06 AC 577 ms
8,256 KB
testcase_07 AC 570 ms
8,212 KB
testcase_08 AC 538 ms
8,336 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
readline=sys.stdin.readline

def floor_sum(n: int, m: int, a: int, b: int) -> int:
    assert 0 <= n
    assert 1 <= m

    ans = 0

    if a >= m:
        ans += (n - 1) * n * (a // m) // 2
        a %= m

    if b >= m:
        ans += n * (b // m)
        b %= m

    y_max = (a * n + b) // m
    x_max = y_max * m - b

    if y_max == 0:
        return ans

    ans += (n - (x_max + a - 1) // a) * y_max
    ans += floor_sum(y_max, a, m, (a - x_max % a) % a)

    return ans

T=int(readline())
for t in range(T):
    N,M,L,R=map(int,readline().split())
    mod=998244353
    M+=1
    R+=1
    def solve(A,B):
        a,aa=divmod(A,N-1)
        b,bb=divmod(B,N-1)
        retu=(a+1)*(b+1)*min(aa,bb)
        if aa<bb:
            retu+=a*(b+1)*(bb-aa)
        elif aa>bb:
            retu+=(a+1)*b*(aa-bb)
        retu+=a*b*(N-1-max(aa,bb))
        return retu
    ans=solve(M,R)-solve(M,L)
    ans%=mod
    print(ans)
0