AtCoder Beginner Contest 245 D - Polynomial division
問題の要約
N次多項式A(x)とM次多項式B(x)がある。
それらの積をC(x)=A(x)B(x)とする。
A0,...,ANおよびC0,...,CN+Mが与えられるので、B0,...,BMを求めよ。
ただし、与えられる入力に対して、条件を満たすB0,...,BMがただ一つ存在することが保証される。
制約
1<=N,M<100
|Ai|<=100
|Ci|<=10^6
AN,CM+M≠0
入力
N M
A0 ... AN
C0 ... CN+M
出力
M+1個のB0,...,BMを空白区切りで一行で出力せよ。
考え方
1,多項式の割り算を実装するだけでよい。
実際のプログラム
#include<iostream>
#include<vector>
using namespace std;
int main(){
int N,M;
cin >> N >> M;
vector<int> A(N+1);
for(int i = 0; i < N+1; i++){
cin >> A[i];
}
vector<int> C(N+M+1);
for(int i = 0; i < N+M+1; i++){
cin >> C[i];
}
vector<int> B(M+1,0);
int j = N;
for(int i = M; i >= 0; i--){
j = N;
B[i] = C[i+j] / A[j];
for(; j >= 0; j--){
C[i+j] = C[i+j] - B[i]*A[j];
}
}
for(int i = 0; i < M+1; i++){
cout << B[i] << " ";
}cout << endl;
return 0;
}