結果

問題 No.148 試験監督(3)
コンテスト
ユーザー vjudge1
提出日時 2026-10-16 20:34:04
言語 C++23
(gcc 15.3.0 + boost 1.92.0 + ACL)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
TLE  
実行時間 -
コード長 1,386 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,342 ms
コンパイル使用メモリ 336,092 KB
実行使用メモリ 9,844 KB
最終ジャッジ日時 2026-10-16 20:34:39
合計ジャッジ時間 14,612 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge4_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other TLE * 3 -- * 9
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
using namespace std;
const long long M=1000000007;
long long pw(long long a,long long b){
    long long r=1;
    while(b){
        if(b&1)r=r*a%M;
        a=a*a%M;
        b>>=1;
    }
    return r;
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int T;
    cin>>T;
    while(T--){
        string sC,sP;
        cin>>sC>>sP;
        bool big=false;
        if(sP.size()>10)big=true;
        else if(sP.size()==10&&sP>="1000000007")big=true;
        if(big){
            cout<<0<<"\n";
            continue;
        }
        long long p=0;
        for(char ch:sP)p=p*10+(ch-'0');
        if(sC.size()<=10){
            long long c=0;
            for(char ch:sC)c=c*10+(ch-'0');
            if(c<2*p-1){
                cout<<0<<"\n";
                continue;
            }
        }
        long long cm=0;
        for(char ch:sC)cm=(cm*10+(ch-'0'))%M;
        long long n=(cm-p+1)%M;
        if(n<0)n+=M;
        if(n<p){
            cout<<0<<"\n";
            continue;
        }
        long long ans=1;
        if(p<=M-1-p){
            for(long long i=n-p+1;i<=n;i++)ans=ans*i%M;
        }else{
            long long a=n-p;
            long long x=1;
            for(long long i=1;i<=a;i++)x=x*i%M;
            for(long long i=n+1;i<=M-1;i++)x=x*i%M;
            ans=(M-pw(x,M-2))%M;
        }
        cout<<ans<<"\n";
    }
    return 0;
}
0