【PAT甲级】1009 Product of Polynomials (25 分)

题意:

给出两个多项式,计算两个多项式的积,并以指数从大到小输出多项式的指数个数,指数和系数。

trick:

这道题数据未知,导致测试的时候发现不了问题所在。

用set统计非零项时,通过set.size()输出非零项个数,set.count()与否来判断是否输出该项时结果第0个测试点答案错误。

用fabs(mp[i])>=0.05时结果全部正确,因为考虑到保留1位小数所以用这个语句来判断保留小数后是否非零。

问题是当去掉fabs()时采用mp[i]>=0.05结果第0个测试点答案错误。

而不管保留1位小数以后才导致的0.0直接输出非零(以下代码采用本方法)又会全部通过。

感觉题意可能引起歧义,测试点也未公开,所以有些答案不得而知,对于小数精度的判断知识又掌握甚少,为节省时间故不再深究。

希望对第0点答案错误的朋友有所帮助。

AAAAAccepted code:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[17],b[17];
 4 double num1[17],num2[17];
 5 map<int,double>mp;
 6 int main(){
 7     int n;
 8     cin>>n;
 9     for(int i=1;i<=n;++i)
10         cin>>a[i]>>num1[i];
11     int m;
12     cin>>m;
13     for(int i=1;i<=m;++i)
14         cin>>b[i]>>num2[i];
15     for(int i=1;i<=n;++i)
16         for(int j=1;j<=m;++j){
17             int x=a[i]+b[j];
18             double ans=num1[i]*num2[j];
19             mp[x]+=ans;
20         }
21     int cnt=0;
22     for(int i=0;i<=2000;++i)
23         if(mp[i])
24             cnt++;
25     cout<<cnt;
26     for(int i=2000;i>=0;--i)
27         if(mp[i])
28             cout<<" "<<i<<" "<<setiosflags(ios::fixed)<<setprecision(1)<<mp[i];
29     return 0;
30 }

 

 

 

posted @ 2019-07-20 16:12  sewage  阅读(365)  评论(0编辑  收藏  举报