版本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;
const int N = 1e5+5;
struct node{
string id, in, out;
}E[N];
bool cmp1(node a, node b){
return a.in < b.in;
}
bool cmp2(node a, node b){
return a.out > b.out;
}
int main(){
int n;
cin>>n;
string id, in, out;
for(int i = 0; i < n; i++){
cin>>E[i].id>>E[i].in>>E[i].out;
}
sort(E, E+n, cmp1);
cout<<E[0].id<<" ";
sort(E, E+n, cmp2);
cout<<E[0].id<<endl;
return 0;
}
版本1
简单的排序
#include<cstdio>
#include<algorithm>
#include<cstring>
const int maxn=1e5+5;
using namespace std;
struct node{
char name[20];
int inh,inm,ins;
int outh,outm,outs;
}Node[maxn];
bool cmp1(node a,node b){
if(a.inh!=b.inh) return a.inh <b.inh;
else if(a.inm!=b.inm) return a.inm < b.inm;
else return a.ins < b.ins;
}
bool cmp2(node a,node b){
if(a.outh!=b.outh) return a.outh > b.outh;
else if(a.outm!=b.outm) return a.outm > b.outm;
else return a.outs > b.outs;
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%s %d:%d:%d %d:%d:%d",Node[i].name,&Node[i].inh,&Node[i].inm,&Node[i].ins,&Node[i].outh,&Node[i].outm,&Node[i].outs);
}
sort(Node,Node+n,cmp1);
printf("%s ",Node[0].name);
sort(Node,Node+n,cmp2);
printf("%s\n",Node[0].name);
return 0;
}

本文深入探讨了两种排序方法的应用,通过实例代码展示了如何利用两次排序解决特定问题,首先按照元素的某一属性进行升序排序,然后按另一属性进行降序排序,提供了C++实现的具体代码。
&spm=1001.2101.3001.5002&articleId=87113632&d=1&t=3&u=fe70861488424ec6a92914833eac4ebf)
283

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



