原题链接
先说说这道题学到了什么。
- map库的使用。键-值对的使用,使得成对存在处理的数据变得方便。如果为基本数据类型,map一般key-value默认为 0,‘\0’。
- map会根据insert进去的键-值对按照键从小到大默认排序,为的是方便搜索。如果想要从大到小进行遍历,则可以对map使用倒序迭代器:reverse_iterator
- 本题是对相同指数的系数相加,指数作为key,系数作为value,在对相同键操作的时候可以直接在一个map上按照以下形式处理。
map[key] +=value;
- 本题坑位太多,系数为0不输出,不允许有多余的空格,输入的数组size为0的话直接输出0。
给出代码:
#include<iostream>
#include<map>
#include<vector>
using namespace std;
int main() {
map<int, float> myMap;
for (int i = 0; i < 2; ++i)
{
int count;
cin >> count;
for (int j = 0; j < count; ++j)
{
int pairFirst;
float pairSecond;
cin >> pairFirst >> pairSecond;
myMap[pairFirst] += pairSecond;
}
}
vector<pair<int, float> > result;
for(map<int, float>::reverse_iterator it = myMap.rbegin(); it != myMap.rend(); it++) {
if(it->second != 0)
result.push_back(make_pair(it->first, it->second));
}
cout << result.size();
for (int i = 0; i < result.size(); ++i)
{
printf(" %d %.1f", result[i].first, result[i].second);
//这样子不晓得为啥会造成错误。
//cout<<" "<<result[i].first<<" "<<(float(int(result[i].second*10)))/10.0;
}
return 0;
}