题目链接:https://www.patest.cn/contests/pat-a-practise/1002
解题思路:这种多项式相加的题很常见,这个算是比较基础的吧。记住两点,如果数据比较小,像这道题一样,则使用数组下标来表示指数;如果指数数据比较大而且离散的比较严重,这种情况就只能用链表了,相当于归并两个链表一样。
这道题用的数组下标表示指数,很简单。
#include <cstdio>
#include <cstring>
const int maxn = 1005;
int main(){
int k,exp,m;
double arr[maxn],brr[maxn];
memset(arr,0,sizeof(arr));
memset(brr,0,sizeof(brr));
scanf("%d",&k);
for(int i=0;i<k;i++){
scanf("%d",&exp);
scanf("%lf",&arr[exp]);
}
scanf("%d",&m);
for(int i=0;i<m;i++){
scanf("%d",&exp);
scanf("%lf",&brr[exp]);
}
int cnt =0;
for(int i=1000;i>=0;i--){
arr[i]+=brr[i];
if(arr[i]!=0){
cnt++;
}
}
printf("%d",cnt);
for(int i=1000;i>=0;i--){
if(arr[i]!=0){
printf(" %d %.1f",i,arr[i]);
}
}
printf("\n");
return 0;
}