题目链接:PAT【甲级】1002题
这个题目其实就像是给你一个链表,来进行链表的合并。类似的道理,不过这里可以借助STL的简便数据结构进行操作。
#include<bits/stdc++.h>
using namespace std;
struct cmp{
bool operator()(const int& a, const int& b)const{
return a > b;
}
};
int main(){
int K, a;
double t;
//因为map默认是由小到大的排序,而且题目输出为由大到小
//所以进行比较函数重载一下
map<int, double, cmp> mymap1, mymap2, ans;
cin >> K;
for (int i = 0; i < K; i++){
cin >> a >> t;
mymap1[a] = t;
}
cin >> K;
for (int i = 0; i < K; i++){
cin >> a >> t;
mymap2[a] = t;
}
auto it1 = mymap1.begin(), it2 = mymap2.begin();
while(it1 != mymap1.end() && it2 != mymap2.end()){
if(it2->first > it1->first){
ans[it2->first] = it2->second;
it2++;
}
else if(it2->first < it1->first){
ans[it1->first] = it1->second;
it1++;
}else{
//这个很重要,不进行零项消除的话,会错的
if(it2->second + it1->second != 0){
ans[it2->first] = it2->second + it1->second;
}
it2++;
it1++;
}
}
while(it1 != mymap1.end()){
ans[it1->first] = it1->second;
it1++;
}
while(it2 != mymap2.end()){
ans[it2->first] = it2->second;
it2++;
}
auto it = ans.begin();
cout << ans.size();
while(it != ans.end()){
cout << " " << it->first << " ";
printf("%.1f", it->second);
it++;
}
return 0;
}
这题感觉就是使用这种高级简便的数据结构会加快编写速度。其他的没啥。