結果
| 問題 | No.3445 Sum of (Tree Distances)^K 2 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-02-06 23:17:49 |
| 言語 | Text (cat 8.3) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,812 bytes |
| 記録 | |
| コンパイル時間 | 230 ms |
| コンパイル使用メモリ | 7,968 KB |
| 実行使用メモリ | 7,976 KB |
| 最終ジャッジ日時 | 2026-02-06 23:17:53 |
| 合計ジャッジ時間 | 2,736 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 3 |
| other | WA * 47 |
ソースコード
// [x^K] 2e^{2x} exp((2e^x+1) log(1/(1-y)) / (2e^x-1) を計算ということになり
// log(1/(1-y))=z と置いて整理, ラグ反を適用すると
// [x^{K-1}] exp({2x+3} z) (定数個の poly) (x の母関数)
// ということになりこれは畳み込みできる
// 実装 間に合いません おたすけ~~~
#include "template/template.hpp"
//
#include "fps/ntt-friendly-fps.hpp"
#include "modint/montgomery-modint.hpp"
#include "modulo/binomial.hpp"
//
#include "fps/multivariate-fps.hpp"
// #include "fps/arbitrary-fps.hpp"
//
using namespace Nyaan;
using mint = LazyMontgomeryModInt<998244353>;
// using mint = LazyMontgomeryModInt<1000000007>;
using vm = vector<mint>;
using vvm = vector<vm>;
Binomial<mint> C;
using fps = FormalPowerSeries<mint>;
using namespace Nyaan;
vm naive(int N, int K) {
vm ans{0};
fps f(K + 1), e(K + 1);
rep(i, K + 1) e[i] = C.finv(i);
rep1(a, N - 1) {
f = (f * (e * 2 + a - 1) + C.fac(a - 1)).pre(K + 1);
mint cur = (f * e)[K] * C.fac(K);
ans.push_back(cur * C.fac(N - 1) * C.finv(a));
}
return ans;
}
vm naive2(int N, int K) {
using mfps = MultivariateFormalPowerSeries<mint>;
vi base{K + 1, N};
mfps e_x(base);
rep(i, K + 1) e_x(i, 0) = C.finv(i);
mfps f1(base);
rep(j, N) f1(0, j) = 1;
f1 = (f1.log() * (e_x * 2 + 1)).exp() * e_x * 2;
mfps f2(base);
rep(j, N) f2(0, j) = j + 1;
mfps f = (f1 - f2) * ((e_x * 2 - 1).inv());
f *= e_x;
vm ans{0};
rep1(a, N - 1) {
mint cur = f(K, a - 1) * C.fac(K) * C.fac(a - 1);
ans.push_back(cur * C.fac(N - 1) * C.finv(a));
}
return ans;
}
void q() {
inl(N, K);
auto ans = naive2(N, K);
each(x, ans) out(x);
}
void Nyaan::solve() {
int t = 1;
// in(t);
while (t--) q();
}