例一:
一、分析
用一个map,其中一个城市对应一堆单号,
再用个vector存储所有城市。
二、代码
#include <bits/stdc++.h>
using namespace std;
int main(){
map<string,vector<string>> mp;
vector<string> cities;
int n;
cin>>n;
while(n--){
string number;
string city;
cin>>number;
cin>>city;
if(!mp.count(city)){
cities.push_back(city);
mp[city].push_back(number);
}else{
mp[city].push_back(number);
}
}
for(auto x:cities){
cout<<x<<' ';
cout<<mp[x].size()<<endl;
for(auto y:mp[x]){
cout<<y<<endl;
}
}
return 0;
}
例二:
一、分析:
map里面一个数字类型对应一堆和它相同的数字
再用一个vector存储出现的数字类型
当数字的出现次数大于该数字类型的大小时:删除的数目增加它们之差
小于则:删除的数目增加数字出现的次数(例如:3在里面只出现了两次,需要把这2个3都删掉)
二、代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
map<int,vector<int>> mp;
vector<int> v;
while(n--){
int x;
cin>>x;
if(!mp[x].size()){
v.push_back(x);
mp[x].push_back(x);
}else{
mp[x].push_back(x);
}
}
int sum=0;
for(auto j:v){
if(mp[j].size()>=j)sum=sum+mp[j].size()-j;
else{
sum=sum+mp[j].size();
}
}
cout<<sum;
return 0;
}