結果
| 問題 | No.148 試験監督(3) |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2026-10-16 21:09:16 |
| 言語 | C++23 (gcc 15.3.0 + boost 1.92.0 + ACL) |
| 結果 |
RE
不安定
|
| 実行時間 | - |
| コード長 | 2,092 bytes |
| 記録 | |
| コンパイル時間 | 2,251 ms |
| コンパイル使用メモリ | 337,436 KB |
| 実行使用メモリ | 7,852 KB |
| 最終ジャッジ日時 | 2026-10-16 21:09:39 |
| 合計ジャッジ時間 | 7,554 ms |
|
ジャッジサーバーID (参考情報) |
judge5_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | RE * 1 -- * 11 |
ソースコード
#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;
}
long long fc(long long n) {
if (n <= 1000000) {
long long r = 1;
for (long long i = 2; i <= n; i++) r = r * i % M;
return r;
}
if (n > M / 2) {
long long r = 1;
for (long long i = n + 1; i < M; i++) r = r * i % M;
return (M - 1) * pw(r, M - 2) % M;
} else {
long long r = 1;
for (long long i = 2; i <= n; i++) r = r * i % M;
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');
long long cm = 0;
for (char ch : sC) cm = (cm * 10 + (ch - '0')) % M;
bool ok = true;
if (sC.size() > 10) ok = true;
else {
long long c = 0;
for (char ch : sC) c = c * 10 + (ch - '0');
if (c < 2 * p - 1) ok = false;
}
if (!ok) {
cout << 0 << "\n";
continue;
}
long long r = (cm - p + 1) % M;
if (r < 0) r += M;
if (r < p - 1) {
cout << 0 << "\n";
continue;
}
long long ans;
if (p <= 1000000) {
ans = 1;
for (long long i = 0; i < p; i++) {
long long x = r - i;
if (x < 0) x += M;
ans = ans * x % M;
}
} else {
long long a = fc(r);
long long b = fc(r - p);
ans = a * pw(b, M - 2) % M;
}
cout << ans << "\n";
}
return 0;
}
vjudge1