题目链接:点击打开链接
题目大意:
数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
解题思路:略。
输入描述:
先输入键值对的个数
然后输入成对的index和value值,以空格隔开
输出描述:
输出合并后的键值对(多行)
AC代码
#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
map<int,int> mp;
int main()
{
int n,idx,val;
while(~scanf("%d",&n))
{
mp.clear();
while(n--) // --n 不行
{
scanf("%d%d",&idx,&val); // "%d%d" ~ "%d %d"
mp[idx]+=val; // 隐含地已经去重了
// 每次遇到新的key的时候,该key值会进行升序排序
/*
mp[0]+=1; // mp[0]==1 // 进行
mp[0]+=2; // mp[0]==3 // 不进行
*/
}
// 遍历
for(map<int,int>::iterator it=mp.begin();it!=mp.end();it++)
{
printf("%d %d\n",it->first,it->second);
// <> 泛型 map<int,int> ~ <key,value>
// first -> key second -> value
}
}
return 0;
}