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     }

 

posted on 2017-03-08 19:46  RocSAMA  阅读(74)  评论(0)    收藏  举报