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;
}

posted @ 2020-11-14 11:08  韩天尊  阅读(58)  评论(0)    收藏  举报