• 运动会(sort+结构体+分段sort)


    运动会


    Time limit: 1000MS    Memory limit: 32768K
    Total Submit: 53    Accepted: 27

    学校一年一度的运动会开始了,由于参加的运动员人数相当多使得名单变得杂乱无章,现在给你一张名单让你对这张名单进行排序,使得排序后变得清晰一点。
    input
    输入一个整数N(N<10000)代表名单上的人数
    接下来N行,每行3个整数K,V,P分别代表他们的运气值、实力值和序号(保证没有相同的序号)。
    output
    经过排序后输出N行(排序时实力值大的优先,实力值相同则运气值大的优先,如果实力值和运气值都相同则序号小的优先)。
    每行输出一个序号。


    sample input
    5
    3 3 2
    4 4 3
    5 5 1
    6 6 4
    7 6 5

    sample output
    5
    4
    1
    3
    2

    #include<stdio.h>
    #include
    <algorithm>
    #define MAX 10001
    using namespace std;
    struct ORDER
    {
    int k;
    int v;
    int p;
    }order[MAX];
    bool cmp_v(ORDER a,ORDER b) //对结构体中不同成员sort,用不同的cmp函数
    {
    return a.v > b.v;
    }
    bool cmp_k(ORDER a,ORDER b)
    {
    return a.k > b.k;
    }
    bool cmp_p(ORDER a,ORDER b)
    {
    return a.p < b.p;
    }

    int main()
    {


    int n, i, j;
    while(scanf("%d", &n) != EOF)
    {
    for(i=0; i<n; i++)
    scanf(
    "%d%d%d", &order[i].k, &order[i].v, &order[i].p);
    sort(order, order
    +n, cmp_v);

    for(i=0; i<n-1;)
    {
    if(order[i].v == order[i+1].v) //找出相同数值段,按题意进行sort
    {
    for(j=i+1; j<n; j++)
    if(order[i].v != order[j].v)
    break;
    sort(order
    +i, order+j, cmp_k); //这里用的非常妙,传参直接 变量名+i,变量名+j
    i = j;
    }
    else
    i
    ++;
    }
    for(i=0; i<n-1;)
    {
    if(order[i].k == order[i+1].k)
    {
    for(j=i+1; j<n; j++)
    if(order[i].k != order[j].k)
    break;
    sort(order
    +i, order+j, cmp_p);
    i
    = j;
    }
    else
    i
    ++;
    }

    for(i=0; i<n; i++)
    printf(
    "%d\n", order[i].p);
    }
    return 0;
    }
  • 相关阅读:
    中文字体
    URL锚点HTML定位技术机制
    关于JS异步加载方案
    select标签用法
    javascript refresh page 几种页面刷新的方法
    用JavaScript刷新框架子页面的七种方法
    robots.txt用法
    netstat 基本用法
    linux下ps命令
    socket编程和并发服务器
  • 原文地址:https://www.cnblogs.com/submarinex/p/1941261.html
Copyright © 2020-2023  润新知