1 条题解

  • 0
    @ 2025-5-7 22:07:17

    题意分析

    这道题要求我们实现两个多项式的复合运算。具体来说:

    多项式 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) 的每一项 aia_i yiy_i,我们需要计算 aia_i(Q(z))i(Q(z))_i,并将其加到 R(z) 中。 计算(Q(z))i(Q(z))_i :对于每个 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
    上传者