传送门:D - Polynomial division
题目大意:给出A(x)和C(x)多项式的序数,A(x)*B(x) = C(x),求B(x)。
坑:这题不能够顺着想,那样会很复杂,但是一旦把数组倒过来,先求B(m),题意就会明朗很多了。
#include <bits/stdc++.h>
using namespace std;
int main() {
int N, M;
cin >> N >> M;
vector<int> A(N + 1), C(N + M + 1);
for (int i = 0; i <= N; ++i) cin >> A[i];
for (int i = 0; i <= N + M; ++i) cin >> C[i];
vector<int> B(M + 1);
for (int i = M; i >= 0; --i) {
B[i] = C[N + i] / A[N];
for (int j = 0; j <= N; ++j) C[i + j] -= B[i] * A[j];
}
for (int i = 0; i <= M; ++i) cout << B[i] << " \n"[i == M];
}