PAT1009 Product of Polynomials
题目:PAT1009
题解:感觉有点麻烦,但不难理解..因为怕超时所以加了好多标记
简单来说就是把第一个多项式放到数组1里,把第二个多项式放到数组2里,然后用数组1所有数去乘数组2中的所有数。数组的下标为多项式的指数。
本来我还以为是指数范围为[1,10],后来错了之后看看题是[1,1000]...
代码:
1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 5 double num1[1005],num2[1005],result[2010]; 6 bool f1[1005],f2[1005],f[2010]; 7 int n1,n2; 8 9 int main() 10 { 11 int u; 12 double v; 13 14 memset(f1,false,sizeof(f1));//标记初始化 15 memset(f2,false,sizeof(f2)); 16 memset(f,false,sizeof(f)); 17 18 19 scanf("%d",&n1); 20 for(int i=0;i<n1;i++)//输入第一个多项式 21 { 22 scanf("%d %lf",&u,&v);//u为指数,v为系数 23 num1[u]=v; 24 f1[u]=true; 25 } 26 27 scanf("%d",&n2); 28 for(int i=0;i<n2;i++)//同上 29 { 30 scanf("%d %lf",&u,&v); 31 num2[u]=v; 32 f2[u]=true; 33 } 34 35 for(int i=0;i<1005;i++) 36 { 37 for(int j=0;j<1005;j++)//多项式相乘 38 { 39 if(f1[i]&&f2[j]){result[i+j]+=(num1[i]*num2[j]);f[i+j]=true;} 40 41 //printf("***%d %f %f %f\n",i+j,result[i+j],num1[i],num2[j]); 42 } 43 } 44 45 int cou=0,mid=4000; 46 for(int i=0;i<2010;i++)//计算有多少个非零项 47 { 48 if(f[i]) 49 { 50 if(result[i]!=0) 51 { 52 cou++; 53 if(i<mid) mid=i; 54 } 55 } 56 57 } 58 59 printf("%d ",cou); 60 61 for(int i=2009;i>=0;i--) 62 { 63 if(result[i]!=0) 64 { 65 printf("%d %.1f",i,result[i]); 66 if(i!=mid) printf(" ");//注意格式空格,不然报错 67 } 68 } 69 70 return 0; 71 }
浙公网安备 33010602011771号