版本2
第二次做也不见得比第一次快很多。
而且我发现第一次的代码更简洁。
#include <cstdio>
#include <cmath>
#include <iostream>
#include <string>
#include <vector>
#include <cstring>
#include <algorithm>
#include <unordered_set>
#include <unordered_map>
#include <map>
using namespace std;
struct node{
string name, id;
int grade;
};
bool cmp(node a, node b){
return a.grade > b.grade;
}
int main(){
int n, grade;
scanf("%d", &n);
vector<node> boy, girl;
string name, id;
char C;
for(int i = 0; i < n; i++){
cin >> name>>C>>id>>grade;
if(C == 'M'){
boy.push_back({name, id, grade});
}else if(C == 'F'){
girl.push_back({name, id, grade});
}
}
//highest
bool flag = false;
if(girl.size() == 0){
puts("Absent");
flag = true;
}else {
sort(girl.begin(), girl.end(), cmp);
cout<<girl[0].name<<" "<<girl[0].id<<endl;
}
//lowest
int bn = boy.size() - 1;
if(boy.size() == 0){
puts("Absent");
flag = true;
}else {
sort(boy.begin(), boy.end(), cmp);
cout<<boy[bn].name<<" "<<boy[bn].id<<endl;
}
//difference
if(flag){
puts("NA");
}else{
cout<<girl[0].grade - boy[bn].grade <<endl;
}
return 0;
}
版本1
这种排序查找的题太多了
对于我现阶段来说并没有特别大的提升,但是为了提交AC时爽一下,我还是再刷了一遍。
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
string namef,idf,namem,idm,name,id;
char sex;
int grade,gradem=101,gradef=-1;
for(int i=0;i<n;i++){
cin>>name>>sex>>id>>grade;
if(sex=='M'){
if(grade < gradem){
gradem = grade;
namem = name;
idm = id;
}
}else{
if(grade > gradef){
gradef = grade;
namef = name;
idf = id;
}
}
}
if(gradef==-1) cout<<"Absent"<<endl;
else cout<<namef<<" "<<idf<<endl;
if(gradem==101) cout<<"Absent"<<endl;
else cout<<namem<<" "<<idm<<endl;
if(gradef==-1 || gradem==101) cout<<"NA"<<endl;
else cout<<gradef-gradem<<endl;
return 0;
}

本文对比了两个版本的C++代码,分析了不同实现方式在效率和代码简洁性上的差异。通过对排序和查找问题的处理,展示了如何在保持代码简洁的同时优化性能。
&spm=1001.2101.3001.5002&articleId=87190993&d=1&t=3&u=ed2e9ce2e8e14326af3388e4485e6c1f)
2万+

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



