test/yosupo/polynomial/inv_of_polynomials.test.cpp
依存するヘッダ(11)
-
二項係数・階乗・順列・多項係数・重複組合せ
lib/combinatorics/combinatorics.hpp -
形式的冪級数 (FPS)
lib/convolution/formal_power_series.hpp -
NTT・畳み込み (convolution)
lib/convolution/ntt.hpp -
Montgomery + AVX2 による NTT 畳み込み (NTT-friendly な 32bit 素数 mod 専用)
lib/convolution/ntt_avx2.hpp -
internal/internal_fft.hpp
lib/internal/internal_fft.hpp -
internal/internal_fft_avx2.hpp
lib/internal/internal_fft_avx2.hpp -
internal/internal_fps_avx2.hpp
lib/internal/internal_fps_avx2.hpp -
internal/internal_math.hpp
lib/internal/internal_math.hpp -
internal/internal_type_traits.hpp
lib/internal/internal_type_traits.hpp -
modint (static_modint / dynamic_modint)
lib/number_theory/modint.hpp -
素数法上で `x` の平方根を 1 つ返す
lib/number_theory/root_mod.hpp
実装
// competitive-verifier: PROBLEM https://judge.yosupo.jp/problem/inv_of_polynomials
#include <iostream>
#include <vector>
#include "convolution/formal_power_series.hpp"
using Mint = modint998;
int main(void) {
int n, m;
std::cin >> n >> m;
std::vector<Mint> f(n), g(m);
for (auto &e : f) std::cin >> e;
for (auto &e : g) std::cin >> e;
auto h = fps::inv_of_polynomials(f, g);
if (!h) {
std::cout << -1 << '\n';
return 0;
}
// h は末尾 0 を除いた正規形 (零多項式なら空)。係数数を出力し係数列を続ける。
std::cout << h->size() << '\n';
for (int i = 0; i < (int)h->size(); ++i) std::cout << (*h)[i] << " \n"[i + 1 == (int)h->size()];
return 0;
}