注意:
指数会存在负数,所以用数组存是不行的,另外计算多想是从乘法的时候不可以两重循环从-1000到1000这样会超时,显然应该根据输入的大小来循环。
另外是注意没有满足条件的情况下,需要特殊处理。
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
#include <queue>
#include <cstdio>
#include <cctype>
#include <unordered_map>
#include <map>
using namespace std;
int main(){
int m, n, key, value;
vector<pair<int, int>> arr, brr;
unordered_map<int, int> mp, pm;
cin>>m;
for(int i = 0; i < m; i++){
cin>>value>>key;
arr.push_back({key, value});
}
cin>>n;
for(int i = 0; i < n; i++){
cin>>value>>key;
brr.push_back({key, value});
}
//计算乘法
for(auto a: arr){
for(auto b: brr){
key = a.first + b.first;
value = a.second * b.second;
mp[key] += value;
}
}
//输出乘法
int flag = 0;
for(int i = 2000; i >= -2000; i--){
if(mp[i] != 0){
if(!flag) {
cout<<mp[i]<<" "<<i;
flag = 1;
}else
cout<<" "<<mp[i]<<" "<<i;
}
}
if(!flag) cout<<"0 0";
cout<<endl;
//计算加法
for(auto a: arr){
key = a.first, value = a.second;
pm[key] += value;
}
for(auto b: brr){
key = b.first, value = b.second;
pm[key] += value;
}
//输出加法
flag = 0;
for(int i = 1000; i >= -1000; i--){
if(pm[i] != 0){
if(!flag) {
cout<<pm[i]<<" "<<i;
flag = 1;
}else
cout<<" "<<pm[i]<<" "<<i;
}
}
if(!flag) cout<<"0 0";
cout<<endl;
return 0;
}