1 条题解
-
0
题意分析
这道题要求我们实现两个多项式的复合运算。具体来说:
多项式 P(y):表示利润 x 与满意客户数 y 之间的关系,形式为: $x = P(y) = a_0 + a_1 y + a_2 y^2 + \cdots + a_m y^m$
多项式 Q(z):表示满意客户数 y 与价格 z 之间的关系,形式为: $y = Q(z) = b_0 + b_1 z + b_2 z^2 + \cdots + b_n z^n$
我们需要将 Q(z) 代入 P(y) 中,得到一个新的多项式 R(z),表示利润 x 与价格 z 之间的关系。
解题思路
要将多项式 Q(z) 代入多项式 P(y) 中,我们需要进行多项式复合运算。具体步骤如下:
初始化结果多项式 R(z):初始时,R(z)=0。 逐项展开 P(y):对于 P(y) 的每一项 ,我们需要计算 ,并将其加到 R(z) 中。 计算 :对于每个 i,计算 Q(z) 的 i 次幂。这可以通过多项式乘法来实现。 多项式乘法:实现一个函数,用于计算两个多项式的乘积。 合并同类项:在每次多项式乘法后,将结果加到 R(z) 中,并合并同类项。
代码实现
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int ans[10010]; int a[110],b[110]; int n,m; int arr[3][10010]; int main() { //freopen("in.txt","r",stdin); int T; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); n++,m++; for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<m;i++) scanf("%d",&b[i]); memset(ans,0,sizeof(ans)); memset(arr,0,sizeof(arr)); for(int i=0;i<m;i++) arr[0][i]=b[i]; ans[0]=a[0]; for(int i=1;i<n;i++){ for(int j=0;j<(m*i+1);j++){ ans[j]+=arr[(i-1)%2][j]*a[i]; arr[i%2][j]=0; } for(int j=0;j<m*i;j++) for(int k=0;k<m;k++) arr[i%2][j+k]+=arr[(i-1)%2][j]*b[k]; } int len=(n-1)*(m-1)+1; printf("%d",ans[0]); for(int i=1;i<len;i++) printf(" %d",ans[i]); puts(""); } return 0; }
- 1
信息
- ID
- 997
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者