結果
問題 |
No.1762 🐙🐄🌲
|
ユーザー |
![]() |
提出日時 | 2025-02-17 19:57:39 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,230 bytes |
コンパイル時間 | 846 ms |
コンパイル使用メモリ | 85,492 KB |
実行使用メモリ | 7,208 KB |
最終ジャッジ日時 | 2025-02-17 19:57:52 |
合計ジャッジ時間 | 12,260 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | WA * 2 RE * 1 |
other | WA * 10 RE * 37 |
ソースコード
#include <iostream> #include <vector> const int MOD = 998244353; using namespace std; // ???? ????? ?????? ???????? vector<long long> factorial(int n) { vector<long long> fact(n + 1, 1); for (int i = 2; i <= n; ++i) { fact[i] = (fact[i - 1] * i) % MOD; } return fact; } // ???? ????? ??????? ???????? ???? ????? long long modInverse(long long a, long long p) { long long result = 1; long long exponent = p - 2; // p ?? ??? ???? while (exponent) { if (exponent % 2 == 1) { result = (result * a) % p; } a = (a * a) % p; exponent /= 2; } return result; } // ???? ????? ??? ????? ?????? ???? long long countTrees(int N, int P) { if (P > N) return 0; // ??? ??? ??? ?????????? ??????? ???? ?? ?????? long long totalWays = 0; auto fact = factorial(N); // ???? ??? ????? for (int k = P; k <= N; ++k) { long long ways = (fact[N - k] * modInverse(fact[k], MOD)) % MOD; ways = (ways * modInverse(fact[N - k - P], MOD)) % MOD; totalWays = (totalWays + ways) % MOD; } return totalWays; } int main() { int N, P; cin >> N >> P; cout << countTrees(N, P) << endl; return 0; }