結果
| 問題 |
No.3048 Swing
|
| コンテスト | |
| ユーザー |
qwewe
|
| 提出日時 | 2025-05-14 13:25:19 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,989 bytes |
| コンパイル時間 | 885 ms |
| コンパイル使用メモリ | 71,332 KB |
| 実行使用メモリ | 7,848 KB |
| 最終ジャッジ日時 | 2025-05-14 13:26:14 |
| 合計ジャッジ時間 | 2,528 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 4 WA * 55 |
ソースコード
#include <iostream>
#include <vector>
#include <numeric> // Not strictly needed for this solution
// Computes (base^exp) % mod
long long power(long long base, long long exp) {
long long res = 1;
long long mod = 1000000007;
base %= mod;
while (exp > 0) {
if (exp % 2 == 1) res = (res * base) % mod;
base = (base * base) % mod;
exp /= 2;
}
return res;
}
// Computes modular inverse of n under modulo mod using Fermat's Little Theorem
long long modInverse(long long n) {
long long mod = 1000000007;
return power(n, mod - 2);
}
// Computes C(n, r) % mod
// C(n, r) = n * (n-1) * ... * (n-r+1) / r!
long long nCr_mod_p(int n, int r) {
if (r < 0 || r > n) return 0; // Invalid r
if (r == 0 || r == n) return 1; // Base cases C(n,0)=1, C(n,n)=1
if (r > n / 2) r = n - r; // Symmetry: C(n, r) = C(n, n-r). Use smaller r.
long long mod = 1000000007;
// Calculate numerator: n * (n-1) * ... * (n-r+1)
long long num = 1;
for (int i = 0; i < r; ++i) {
num = (num * (n - i)) % mod;
}
// Calculate denominator: r!
long long den = 1;
for (int i = 1; i <= r; ++i) {
den = (den * i) % mod;
}
// Result is (num * inv(den)) % mod
return (num * modInverse(den)) % mod;
}
int main() {
std::ios_base::sync_with_stdio(false); // Speeds up C++ I/O
std::cin.tie(NULL); // Unties cin from cout
int K;
std::cin >> K;
if (K % 2 != 0) {
std::cout << 0 << std::endl;
} else {
// We need to calculate C(K, K/2)
// For K = 114514810, K/2 = 57257405.
// The nCr_mod_p function performs about K/2 multiplications for numerator
// and K/2 for denominator. Total roughly K multiplications.
// For K/2 = 5.7 * 10^7, this means about 1.14 * 10^8 multiplications.
// This should be acceptable within the 2-second time limit for C++.
std::cout << nCr_mod_p(K, K / 2) << std::endl;
}
return 0;
}
qwewe