結果

問題 No.3445 Sum of (Tree Distances)^K 2
コンテスト
ユーザー NyaanNyaan
提出日時 2026-02-06 23:17:49
言語 Text
(cat 8.3)
結果
WA  
実行時間 -
コード長 1,812 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 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
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

// [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();
}
0