結果

問題 No.148 試験監督(3)
コンテスト
ユーザー T1610
提出日時 2026-09-23 17:38:45
言語 Python3
(3.14.7 + numpy 2.5.2 + scipy 1.18.0 + ACL)
コンパイル:
python3 -mpy_compile _filename_
実行:
python3 _filename_
結果
TLE  
実行時間 -
コード長 1,020 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 60 ms
コンパイル使用メモリ 14,976 KB
実行使用メモリ 10,880 KB
最終ジャッジ日時 2026-09-23 17:38:57
合計ジャッジ時間 9,002 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge4_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other TLE * 1 -- * 11
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

import sys

# 10000桁の入力をパースするために制限を解除
# sys.set_int_max_str_digits(20000)

MOD = 10**9 + 7

def solve():
    T = int(input())
    
    for _ in range(T):
        C, P = list(map(int, input().split()))
        # 足切り①: 物理的に配置不可能
        if C < 2 * P - 1:
            print(0)
            continue
            
        # 足切り②: P! が MOD の倍数になる
        if P >= MOD:
            print(0)
            continue
            
        # N を計算し、MOD で割った余りを出す
        N = C - P + 1
        n_mod = N % MOD
        
        # 足切り③: 連続するP個の整数の掛け算の中に MOD の倍数が含まれる
        if n_mod < P:
            print(0)
            continue
            
        # 全ての足切りを抜けた場合のみ、O(P) で計算
        ans = 1
        for i in range(P):
            ans = (ans * (n_mod - i)) % MOD
            
        print(ans)

if __name__ == '__main__':
    solve()
0