排序题
1.https://www.acwing.com/problem/content/431/
主要是重载小于号和自己写比较函数两种方法,但是之前不会
现在会了就好
####重载小于号
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 using namespace std; 5 const int N = 310; 6 struct Person{ 7 int id , sum , a, b, c; 8 bool operator< (Person& t) const{ 9 if(sum!=t.sum) return sum>t.sum; 10 if(a!=t.a) return a>t.a; 11 return id<t.id; 12 } 13 }q[N]; 14 int main(){ 15 int n; 16 scanf("%d" ,&n); 17 int a,b,c; 18 for(int i = 1 ; i <= n ; i++){ 19 scanf("%d%d%d" , &a , &b , &c); 20 q[i] = {i,a+b+c , a ,b , c}; 21 } 22 sort(q+1 , q+n+1); 23 for(int i = 1 ; i <= 5 ; i++){ 24 printf("%d %d\n" , q[i].id , q[i].sum); 25 } 26 return 0; 27 }
####自定义函数
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 310;
struct Person{
int id , sum , a, b, c;
}q[N];
bool cmp(Person &a , Person &b){
if(a.sum!=b.sum) return a.sum>b.sum;
if(a.a!=b.a) return a.a>b.a;
return a.id<b.id;
}
int main(){
int n;
scanf("%d" ,&n);
int a,b,c;
for(int i = 1 ; i <= n ; i++){
scanf("%d%d%d" , &a , &b , &c);
q[i] = {i,a+b+c , a ,b , c};
}
sort(q+1 , q+n+1 , cmp);//这里的排序开始结束看一下
for(int i = 1 ; i <= 5 ; i++){
printf("%d %d\n" , q[i].id , q[i].sum);
}
return 0;
}
都用到了结构体,这是最基本的东西