結果
問題 |
No.1762 🐙🐄🌲
|
ユーザー |
![]() |
提出日時 | 2025-02-17 19:59:23 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,564 bytes |
コンパイル時間 | 939 ms |
コンパイル使用メモリ | 85,620 KB |
実行使用メモリ | 7,152 KB |
最終ジャッジ日時 | 2025-02-17 19:59:26 |
合計ジャッジ時間 | 2,784 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | WA * 3 |
other | AC * 17 WA * 30 |
ソースコード
#include <iostream> #include <vector> const int MOD = 998244353; using namespace std; // ???? ????? ?????? ???????? vector<long long> factorial(int n) { vector<long long> fact(n + 1); fact[0] = 1; for (int i = 1; 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 || (N - P * 8) < 0) return 0; // ??? ??? ??? ??? ?????????? ???? ?? ??? ?????? long long totalTrees = 0; auto fact = factorial(N); // ????? ?? ????? ?????? for (int k = P; k <= N; k++) { if (N - k * 8 < 0) break; int remaining = N - k * 8; // ?????? ???????? int thorns = remaining / 4; // ??? ????? ?????? if (thorns * 4 + remaining % 4 != 0) continue; // ??? ?? ???? ????????? ????? // ???? ??? ????? long long ways = (fact[N] * modInverse(fact[k], MOD)) % MOD; // ????? ?????? ways = (ways * modInverse(fact[remaining], MOD)) % MOD; // ????? ?????? ???????? totalTrees = (totalTrees + ways) % MOD; } return totalTrees; } int main() { int N, P; cin >> N >> P; cout << countTrees(N, P) << endl; return 0; }