結果
| 問題 | No.148 試験監督(3) |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2026-10-16 21:12:35 |
| 言語 | C++23 (gcc 15.3.0 + boost 1.92.0 + ACL) |
| 結果 |
TLE
不安定
|
| 実行時間 | - |
| コード長 | 1,756 bytes |
| 記録 | |
| コンパイル時間 | 2,388 ms |
| コンパイル使用メモリ | 337,408 KB |
| 実行使用メモリ | 9,924 KB |
| 最終ジャッジ日時 | 2026-10-16 21:13:01 |
| 合計ジャッジ時間 | 14,618 ms |
|
ジャッジサーバーID (参考情報) |
judge5_0 / judge4_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | TLE * 3 -- * 9 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
long long pw(long long a, long long b) {
long long r = 1;
while (b) {
if (b & 1) r = r * a % MOD;
a = a * a % MOD;
b >>= 1;
}
return r;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int T;
cin >> T;
while (T--) {
string Cstr, Pstr;
cin >> Cstr >> Pstr;
bool pBig = false;
if (Pstr.size() > 10) pBig = true;
else if (Pstr.size() == 10 && Pstr >= "1000000007") pBig = true;
if (pBig) {
cout << 0 << "\n";
continue;
}
long long P = 0;
for (char ch : Pstr) P = P * 10 + (ch - '0');
if (Cstr.size() <= 10) {
long long C = 0;
for (char ch : Cstr) C = C * 10 + (ch - '0');
if (C < 2 * P - 1) {
cout << 0 << "\n";
continue;
}
}
long long cmod = 0;
for (char ch : Cstr) cmod = (cmod * 10 + (ch - '0')) % MOD;
long long n = (cmod - P + 1) % MOD;
if (n < 0) n += MOD;
if (n < P) {
cout << 0 << "\n";
continue;
}
long long ans = 1;
if (P <= MOD - 1 - P) {
for (long long i = 0; i < P; i++) {
ans = ans * (n - i) % MOD;
}
} else {
long long comp = 1;
for (long long i = 1; i <= n - P; i++) {
comp = comp * i % MOD;
}
for (long long i = n + 1; i < MOD; i++) {
comp = comp * i % MOD;
}
ans = (MOD - 1) * pw(comp, MOD - 2) % MOD;
}
cout << ans << "\n";
}
return 0;
}
vjudge1