結果

問題 No.2452 Incline
ユーザー vwxyzvwxyz
提出日時 2023-09-13 04:32:06
言語 Python3
(3.12.2 + numpy 1.26.4 + scipy 1.12.0)
結果
AC  
実行時間 771 ms / 2,000 ms
コード長 931 bytes
コンパイル時間 88 ms
コンパイル使用メモリ 12,800 KB
実行使用メモリ 10,880 KB
最終ジャッジ日時 2024-06-30 14:43:35
合計ジャッジ時間 6,765 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 31 ms
10,624 KB
testcase_01 AC 30 ms
10,752 KB
testcase_02 AC 30 ms
10,624 KB
testcase_03 AC 718 ms
10,880 KB
testcase_04 AC 771 ms
10,752 KB
testcase_05 AC 697 ms
10,880 KB
testcase_06 AC 694 ms
10,752 KB
testcase_07 AC 713 ms
10,880 KB
testcase_08 AC 670 ms
10,752 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