[题解] 烦恼的Slithery

· · 个人记录

题意

按照给定的规则进行排序

分析

由于一名选手对应多个关键数据,我们很自然地考虑使用结构体来存储。对于排序,我们可以直接调用库函数sort,自定义cmp函数或者重载 < 运算符即可。

代码

结构体+sort

#include<bits/stdc++.h>
using namespace std;

struct mem{
    int num;
    int t;
    int p;
}w[1000010];

int n;

bool cmp(mem a,mem b)
{
    if(a.t>b.t)
        return true;
    if(a.t==b.t)
        return a.p<b.p;
    return false;
}

int main()
{
    cin>>n;
    for(int i=1;i<=n;++i)
    {
        w[i].num=i;
        cin>>w[i].t>>w[i].p;
    }

    sort(w+1,w+n+1,cmp);

    for(int i=1;i<=n;++i)
        cout<<w[i].num<<endl;

    return 0;
}

说明

考虑到很多同学并不会写cmp函数或者重载运算符,我们提供另一种思路。可以使用三个数组,分别存储编号、题数和罚时,采用快速排序或者归并排序,在写排序函数时注意到两个比较大小的条件和交换时三个全部交换,即可完成排序过程。

本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。