【问题描述】
一个多项式可以表示为一组数对,数对中第一个数始终为整数,且唯一,表示多项式的次数,另一数表示为对应的系数且不为0。输入两组数对,每组以0 0作为结束,实现对两个多项式的加法并按降幂输出结果数对
【输入形式】
每行输入一个数对,以空格为分隔符,以0 0结束
【输出形式】
每行输出一个数对,以空格为分隔符
【样例输入】
5 12 3 8 1 2 15 5 0 10 0 0 3 12 30 1 15 5 0 0
【样例输出】
30 1 15 10 5 12 3 20 1 2 0 10
#include <bits/stdc++.h>
using namespace std;
bool cmp(array<int, 2> l, array<int, 2> r)
{
return l[0] > r[0];
}
int main()
{
array<int, 2> a;
vector<array<int, 2>> n;
while (cin >> a[0] >> a[1])
{
if (a[0] == 0 && a[1] == 0) break;
n.push_back(a);
}
array<int, 2> b;
vector<array<int, 2>> m;
while (cin >> b[0] >> b[1])
{
if (b[0] == 0 && b[1] == 0) break;
m.push_back(b);
}
vector<array<int, 2>>::iterator t = n.begin(), e = n.end(), r, f;
while (t != e)
{
r = m.begin(), f = m.end();
while (r != f)
{
if ((*r)[0] == (*t)[0])
{
(*t)[1] += (*r)[1];
m.erase(r);
f--;
break;
}
else r++;
}
if ((*t)[1] == 0)
{
n.erase(t); e--;
}
else t++;
}
r = m.begin(), f = m.end();
while (r != f)
{
n.push_back(*r); r++;
}
t = n.begin(), e = n.end();
sort(t, e, cmp);
while (t != e)
{
cout << (*t)[0] << ' ' << (*t)[1] << endl;
t++;
}
return 0;
}