膜拜大佬得新思路,实在是太妙了
#include <bits/stdc++.h>
using namespace std;
int main() {
int n = 0;
cin >> n;
int key, value;
map<int, int, less<int>> pary;
for(int i = 0; i < n; i++) {
cin >> key >> value;
if(pary.count(key) == 0) {
pary.insert(make_pair(key,value));
}
else {
pary[key] += value;
}
}
for(auto it = pary.begin(); it != pary.end(); it++) {
cout << it->first << " " << it->second << endl;
}
return 0;
}
思路
1.创建结构体来记录index和value
2.设计cmp来实现排序顺序
3.实现函数mergeTable
step1 将输入的dt数组不同的元素提取出来存放到temp数组中
step2 对temp排序操作
step2 将temp的值赋给dp数组
总的来说,这道题目是不难的,加油吧!继续刷题!
#include <bits/stdc++.h>
using namespace std;
//创建结构体
struct datatable {
int index;
int value;
};
//按照index大小排序
bool cmp(datatable a, datatable b) {
return a.index < b.index;
}
int findIndex(vector<datatable> temp, int a) {
int flag = -1;
for(int i = 0; i < temp.size(); i++) {
if(temp[i].index == a) {
flag = i;
break;
}
}
return flag;
}
//
void mergeTable(vector<datatable> &dt) {
vector<datatable> tempdt;
int tempindex = 0,a = 0;
for(int i = 0; i < dt.size(); i++) {
//dt[i]不在temp中,就把dt[i]加入到temp中
if(findIndex(tempdt,dt[i].index) == -1) {
datatable temp;
temp.index = dt[i].index;
temp.value = dt[i].value;
tempdt.push_back(temp);
}
//dt[i]在temp中,就找到第一个下标相等的位置
else {
a = findIndex(tempdt, dt[i].index);
tempdt[a].value += dt[i].value;
}
}
sort(tempdt.begin(), tempdt.end(), cmp);
dt = tempdt;
}
int main()
{
int n;
int a,b;
cin>>n;
//初始化与赋值
vector<datatable> dt(n);
for(int i = 0; i < n; i++) {
cin>>a>>b;
dt[i].index = a;
dt[i].value = b;
}
mergeTable(dt);
for(int i = 0; i < dt.size(); i++) {
cout << dt[i].index << " " << dt[i].value << endl;
}
return 0;
}