向量与结构体结合
排序和映射结合
#include<bits/stdc++.h>
#include <unordered_map>
const int maxn=1e5+10;
using namespace std;
struct node{
string s;
int score;
};
bool cmp(node a, node b){
if(a.score!=b.score) return a.score > b.score;
else return a.s<b.s;
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
vector<node> v(n); //向量长度
for(int i=0;i<n;i++){
cin>> v[i].s >>v[i].score;
}
for(int i=1;i<=m;i++){
string s;
int tmp;
cin>>tmp>>s;
vector<node> temp;
printf("Case %d: %d %s\n",i,tmp,s.c_str());
if(tmp==1){
for(int j=0;j<n;j++){
if(s[0]==v[j].s[0])
temp.push_back(v[j]);
}
sort(temp.begin(),temp.end(),cmp);
if(temp.size()==0){
printf("NA\n");
}else{
for(int j=0;j<temp.size();j++){
printf("%s %d\n",temp[j].s.c_str(),temp[j].score);
}
}
}else if(tmp==2){
int number=0,total=0;
for(int j=0;j<n;j++){
if(v[j].s.substr(1,3) == s) {
number++;
total+=v[j].score;
}
}
if(number==0){
printf("NA\n");
}else{
printf("%d %d\n",number,total);
}
}else if(tmp==3){
unordered_map<string ,int> mp;
mp.clear();
unordered_map<string ,int>::iterator it;
for(int j=0;j<n;j++){
if(v[j].s.substr(4,6)==s) mp[v[j].s.substr(1,3)]++;
}
for(it=mp.begin();it!=mp.end();it++){
temp.push_back({it->first,it->second});
}
sort(temp.begin(),temp.end(),cmp);
if(temp.size()==0){
printf("NA\n");
}else{
for(int j=0;j<temp.size();j++){
printf("%s %d\n",temp[j].s.c_str(),temp[j].score);
}
}
}
}
return 0;
}