第28题(并查集):多项式合并



Description

一天,涛涛在数学课上学习了多项式。老师布置了一个家庭作业:将两个只含有"+","^"和数字的多项式合并成一个新的多项式。
具体方法如下:
有两个多项式‘2x^5+3x^3+1x^0’和‘7x^6+2x^5+1x^2+7x^1’,我们将他们表示为:‘3 2 5 3 3 1 0’ 和‘4 7 6 2 5 1 2 7 1’,
第一个数代表有几个项,后面有这么多组数,每组两个数,第一个数代表这一项的底数,第二个代表这一项的指数(注意:题目给出的数据保证同一
个多项式中每一项的指数是递减的)。两个多项式合并后的多项式为:‘7x^6+4x^5+3x*3+1x^2+7x^1+1x^0’,表示为:‘6 7 6 4 5 3 3 1 2 7 1 1 0’
(注意:合并后要求指数呈递减)。
现在,涛涛把这个任务交给了你,希望你帮他完成这个任务(涛涛已经把两个多项式转换成了我们的表达方式,我们也只需用我们的表达方式输
出)。

Input

       第一行:一个整数n,表示第一个多项式有n项;
       第二行:n组整数,每组两个数,分别表示第一个多项式每项的底数和指数,用空格隔开。
       第三行:一个整数m,表示第一个多项式有m项;
       第四行:m组整数,每组两个数,分别表示第二个多项式每项的底数和指数,用空格隔开。

Output

        第一行:一个整数ans,表示合并后的多项式有ans项;
       后ans行:每行两个数,分别表示合并后的多项式每项的底数和指数,用空格隔开。

Sample Input

 
 

Sample Input: 3 2 5 3 3 1 0 4 7 6 2 5 1 2 7 1 Sample Output: 6 7 6 4 5 3 3 1 2 7 1 1 0 Hint: 1<=n,m<=30; 每一项的底数和指数均小于99999。

AC CODE:

#include<bits/stdc++.h>
using namespace std;
int p[100000];
int n,a,b,ans=0;
int main(){
    cin>>n;
    for (int i=0;i<n;i++){
        cin>>a>>b;
        if (!p[b]) ans++;
        p[b]+=a;
    }
    cin>>n;
    for (int i=0;i<n;i++){
        cin>>a>>b;
        if (!p[b]) ans++;
        p[b]+=a;
    }
    cout<<ans<<endl;
    for (int i=99999;i>=0;i--)
    if (p[i]) cout<<p[i]<<" "<<i<<endl;
}

猜你喜欢

转载自blog.csdn.net/HYWRay/article/details/80056258