algo — C++23 日本語リファレンス GitHub

test/yosupo/polynomial/product_of_polynomial_sequence.test.cpp

AC · 最終更新 2026-09-07 · GitHub

問題: https://judge.yosupo.jp/problem/product_of_polynomial_sequence

依存するヘッダ(5)
実装
// competitive-verifier: PROBLEM https://judge.yosupo.jp/problem/product_of_polynomial_sequence
#include <functional>
#include <iostream>
#include <queue>
#include <utility>
#include <vector>
#include "convolution/ntt.hpp"

using Mint = modint998;

std::vector<Mint> prod(const std::vector<std::vector<Mint>> &a, int l, int r) {
    if (l + 1 == r) return a[l];
    int m = (l + r) / 2;
    return convolution(prod(a, l, m), prod(a, m, r));
}

int main(void) {
    int n;
    std::cin >> n;
    std::vector<std::vector<Mint>> a(n);
    std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int>>, std::greater<>> p_que;
    for (int i = 0; i < n; ++i) {
        int d;
        std::cin >> d;
        p_que.emplace(d + 1, i);
        a[i].resize(d + 1);
        for (int j = 0; j < d + 1; ++j) std::cin >> a[i][j];
    }

    if (n == 0) {
        std::cout << 1 << '\n';
    } else {
        auto ans = prod(a, 0, n);
        int sz = ans.size();
        for (int i = 0; i < sz; ++i) std::cout << ans[i] << " \n"[i == sz - 1];
    }

    return 0;
}