题目描述
一条单链表可以表示一个一元多项式,每个节点包含三个域:指数、系数和后继节点(指针或引用)。
表示多项式3X4-6X2+5X-10的单链表如图所示。给定两个多项式,实现两个多项式相加算法。
输入
第一行输入包含两个整数m,n
后续为m行和n行数据
m,n分别代表两个多项式的项数
后续每一行代表多项式的项,包含a,b两个数据,表示该项的系数和指数。
输出
从较高指数到较低指数,依次输出求得的和。
每行一项,格式与输入相同,但无需输出项数,系数为0的项也不输出。
样例输入 Copy
2 3
1 2
1 1
2 2
1 1
2 0
样例输出 Copy
3 2
2 1
2 0
#include<iostream>
#include<bits/stdc++.h>
#include<algorithm>
#include<string>
#include<stack>
#include<map>
#include<pair>
#include<list>
#include<vector>
#include<queue>
#include<deque>
#include<set>
#include<functional>
#define pi 3.14159265358979323846264338327950288419716939937510582097494
using namespace std;
typedef long long ll;
ll n,m;
ll ci,xi;
typedef map<int,int>MP;
typedef pair<int, int> PAIR;
bool cmp(PAIR &left, PAIR &right) {
return left.first >right.first ;
}
int main() {
MP mp;
cin>>n>>m;
for(ll i=0; i<n+m; i++) {
cin>>xi>>ci;
mp[ci]+=xi;
}
vector<PAIR> vec(mp.begin(),mp.end());
sort(vec.begin(),vec.end(),cmp);
for(auto &it:vec) if(it.second) cout<<it.second<<' '<<it.first<<endl;
return 0;
}