题意:
给出两个多项式,计算两个多项式的积,并以指数从大到小输出多项式的指数个数,指数和系数。
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 }