結果
| 問題 |
No.2120 場合の数の下8桁
|
| コンテスト | |
| ユーザー |
259_Momone
|
| 提出日時 | 2022-11-04 22:18:12 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,391 bytes |
| コンパイル時間 | 2,471 ms |
| コンパイル使用メモリ | 247,764 KB |
| 最終ジャッジ日時 | 2025-02-08 17:57:10 |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 16 WA * 2 RE * 2 |
ソースコード
#include <bits/extc++.h>
int main() {
using namespace std;
unsigned long M, N;
cin >> M >> N;
unsigned long value{1}, ord_2{}, ord_5{};
if(N > M - N)N = M - N;
const auto multiplies{[&value, &ord_2, &ord_5](unsigned long x){
while(x && x % 2 == 0){
++ord_2;
x /= 2;
}
while(x && x % 5 == 0){
++ord_5;
x /= 5;
}
(value *= x) %= 100000000;
}};
const auto divides{[&value, &ord_2, &ord_5](unsigned long x){
while(x && x % 2 == 0){
--ord_2;
x /= 2;
}
while(x && x % 5 == 0){
--ord_5;
x /= 5;
}
(value *= [](unsigned long a, unsigned long n){
unsigned long r{1};
while(n){
if(n & 1)(r *= a) %= 100000000;
(a *= a) %= 100000000;
n /= 2;
}
return r;
}(x, 4999999)) %= 100000000;
}};
for(unsigned long i{}; i < N; ++i){
multiplies(M - i);
divides(i + 1);
}
ord_2 = min(ord_2, 10UL);
ord_5 = min(ord_5, 10UL);
assert(ord_2 < M && ord_5 < M);
while(ord_2 > 0){
--ord_2;
(value *= 2) %= 100000000;
}
while(ord_5 > 0){
--ord_5;
(value *= 5) %= 100000000;
}
printf("%08lu\n", value);
return 0;
}
259_Momone