PAT (Advanced Level) Practice : 1002 A+B for Polynomials (25分)
1002 A+B for Polynomials (25分)
测试点2和测试点6的坑
测试点2:系数结果可能是负数
测试点6:最后所有系数都是0,要返回一个0,而且最后不得带有空格。
实现
哈希表:直接定址法
hash[1001]={0}
每次读入指数和系数,指数作为下标,将系数加在hash上。
最后统计不为0的桶数,输出。
注意精度控制,要控制一位精度。
代码
#include <iostream>
#include <vector>
using namespace std;
#include <cmath>
#include <stack>
#include <queue>
#include <map>
#include <sstream>
//#include <algorithm>
#include <deque>
#include <iomanip>
int main()
{
double hash1[1001]={0};
int k;
int n;
double a;
cin>>k;
for(int i=0;i<k;i++)
{
cin>>n>>a;
hash1[n]+=a;
}
cin>>k;
for(int i=0;i<k;i++)
{
cin>>n>>a;
hash1[n]+=a;
}
int count1=0;
for(int i=0;i<1001;i++)
{
if(hash1[i]!=0)
count1++;
}
if(count1==0)
cout<<count1<<endl;
else
cout<<count1<<" ";
vector<int> indexes;
for(int i=1000;i>=0;i--)
{
if(hash1[i]!=0)
{
indexes.push_back(i);
}
}
for(int i=0;i<indexes.size();i++)
{
if(i==indexes.size()-1)
{
cout<<indexes[i]<<" ";
cout<<setiosflags(ios::fixed);
cout<<setprecision(1)<<hash1[indexes[i]];
}else
{
cout<<indexes[i]<<" ";
cout<<setiosflags(ios::fixed);
cout<<setprecision(1)<<hash1[indexes[i]]<<" ";
}
}
return 0;
}