算法-多条件排序

 1、数对排序的使用

pair a[31];

//cmp为比较规则
ll cmp(paira,pairb){
    if(a.first!=b.first)return a.first>b.first;
    else return a.second

 2、具体例题

算法-多条件排序_第1张图片

 输入样例:

3
1 1
2 2
9 3
6 4
7 5
11 6
3 7
13 8
8 9
16 10
4 11
19 12
17 13
5 14
12 15
15 16
14 17
10 18
20 19
18 20
5 11
10 12
30 13
22 14
1 1
28 20
21 16
26 17
2 2
24 3
4 4
29 5
8 6
7 15
6 7
3 8
9 9
25 10
23 19
27 18
19 20
26 19
27 18
18 17
21 16
12 15
28 14
20 13
17 12
14 11
13 10
23 9
29 8
22 7
30 6
15 5
24 4
25 3
16 2
11 1

输出样例:

1 50
2 42
11 39
24 34
16 31
6 29
9 29
25 28
29 27
3 25
4 25
8 25
13 22
30 21
7 20
15 19
22 19
5 15
17 15
14 12
23 12
10 10
12 10
19 8
20 8
21 8
28 6
26 4
27 4
18 3

 思路:分数不同,按分数降序排列;分数相同,按编号升序排列。

#include
#include
using namespace std;
typedef long long ll;
pair a[31];
bool vis[31];
ll cmp(paira,pairb){
    if(a.first!=b.first)return a.first>b.first;
    else return a.second>n;
    for(ll i=1;i<=30;i++){
        a[i].first=0;//分数
        a[i].second=i;//编号
    }
    memset(vis,false,sizeof(vis));
    ll b[21]={0,25,21,18,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};
    while(n--){
        for(ll i=1;i<=20;i++){
            ll c,p;
            cin>>c>>p;
            a[c].first+=b[p];
            vis[c]=true;
        }
    }
    sort(a+1,a+31,cmp);
    for(ll i=1;i<=30;i++){
        if(vis[a[i].second]){
            cout<

你可能感兴趣的:(算法,c++)