折腾了一会,把每个查询分成函数调用错了,写在主函数里面又AC了……我感觉我写的都一样
#include <bits/stdc++.h>
using namespace std;
int m,n,query;
struct Node{
string name;
int val;
friend bool operator <(Node a,Node b){
if(a.val!=b.val)return a.val>b.val;
else return a.name<b.name;
}
};
vector<Node> vec;
int main(){
scanf("%d%d",&n,&query);
for(int i=0;i<n;i++){
Node nd;
cin>>nd.name>>nd.val;
vec.push_back(nd);
}
sort(vec.begin(),vec.end());
for(int i=0;i<query;i++){
string str;
int type;
cin>>type>>str;
printf("Case %d: %d %s\n",i+1,type,str.c_str());
if(type==1){
bool flag=false;
for(int j=0;j<n;j++){
if(vec[j].name[0]==str[0]){
printf("%s %d\n",vec[j].name.c_str(),vec[j].val);
flag=true;
}
}
if(!flag)printf("NA\n");
}
else if(type==2){
int cnt=0,sumval=0;
for(int j=0;j<n;j++){
if(vec[j].name.substr(1,3)==str){
cnt++;
sumval+=vec[j].val;
}
}
if(cnt==0)printf("NA\n");
else printf("%d %d\n",cnt,sumval);
}
else if(type==3){
unordered_map<string,int> mp;
for(int j=0;j<n;j++){
if(vec[j].name.substr(4,6)==str){
mp[vec[j].name.substr(1,3)]++;
}
}
vector<Node> site;
for(auto item:mp){
Node nd;
nd.name=item.first;
nd.val=item.second;
site.push_back(nd);
}
sort(site.begin(),site.end());
for(auto item:site)printf("%s %d\n",item.name.c_str(),item.val);
if(site.empty())printf("NA\n");
}
}
}
574

被折叠的 条评论
为什么被折叠?



