#include<iostream>
#include<utility>//pair在这个里面
#include<vector>
#include<iomanip>
using namespace std;
int main(){
vector<pair<int,float>>merge1,merge2,merge;//归并排序里的归并
int num1;
cin>>num1;
for(int i=0;i<num1;i++){
pair<int,float>res;
cin>>res.first;
cin>>res.second;
merge1.push_back(res);
}
int num2;
cin>>num2;
for(int i=0;i<num2;i++){
pair<int,float>res;
cin>>res.first;
cin>>res.second;
merge2.push_back(res);
}
int h1=0,h2=0;
while(h1<num1&&h2<num2){
if(merge1[h1].first<merge2[h2].first){//每个数组都有一个指针,如果第一个数的次数比第二个数的次数大呢么就将这个数压入栈,如果相同就相加,小于就压另一个。
merge.push_back(merge2[h2++]);
}else if(merge1[h1].first==merge2[h2].first){
pair<int,float> sol;
sol.first=merge1[h1].first;
sol.second=merge1[h1].second+merge2[h2].second;
if(sol.second)//如果是0就不压入栈,这里要注意,否则会出错。
merge.push_back(sol);
h1++;
h2++;
}else{
merge.push_back(merge1[h1++]);
}
}
while(h1<num1){
merge.push_back(merge1[h1++]);
}
while(h2<num2){
merge.push_back(merge2[h2++]);
}
cout<<merge.size();
if(merge.size())
cout<<" ";
int cnt=0;
while(cnt<merge.size()){
if(merge[cnt].second){
cout<<merge[cnt].first;
cout<<" ";
cout << setiosflags(ios::fixed) << setprecision(1) << merge[cnt].second;
if(cnt!=merge.size()-1)//PTA一定要注意格式,多一个空格就会出错。
cout<<" ";
}
cnt++;
}
cout<<endl;
}
PAT甲级1002(拿了25分)
最新推荐文章于 2024-07-02 21:33:53 发布