1. 程式人生 > 實用技巧 >PAT (Advanced Level) Practice : 1002 A+B for Polynomials (25分)

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