XDOJ1121 - 排序

Description

MSTC里有好多有特长的人, 有些是力量型人才,有些是智力型人才,有些是敏捷型的。

现在告诉你 N 个人, 每个人的力量,智力,敏捷的值, 和每个人的编号。

题目要求你将 N 个部员 按照力量 从大到小 排序, 如果两个部员的力量相同, 则按照 智力 值从大到小排序, 如果

两个部员力量, 智力 都一样,则按照 敏捷从 小 到 大排序。 测试数据保证没有两个部员的 力量, 智力, 敏捷 全部相同。

 

Input

第一行 N :表示有 N 个同学。 (  1 <= N <= 500 )
接下来 N 行,
第 i 行有 3 个值, ai, bi, ci   a 代表 力量, b 代表智力, c 代表敏捷。 编号为 i
( i 是部员的编号, 1 <= i <= N )
 

Output

输出 N 行:

将排序后的部员编号输出。
每行一个编号

Sample Input

4
2 2 3
2 3 4
4 8 9
2 2 2

Sample Output

3
2
4
1

解题思路:

主要考察排序,当然可以自己写一个排序程序。但是这里我用于STL中的sort排序。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

struct MSTC
{
    int a,b,c;
    int id;
};
vector<MSTC> stu;
bool lessComp(const MSTC& r1,const MSTC& r2)
{
   if(r1.a>r2.a) return true;
   else if(r1.a==r2.a&&r1.b>r2.b) return true;
   else if(r1.a==r2.a&&r1.b==r2.b&&r1.c<r2.c) return true;
   else return false;
}
int main()
{
    int N;

    while(cin>>N)
    {
        for(int i=0;i<N;++i)
        {
            MSTC t;
            cin>>t.a>>t.b>>t.c;
            t.id = i+1;
            stu.push_back(t);
        }
        sort(stu.begin(),stu.end(),lessComp);
        for(int i=0;i<N;++i)
            cout<<stu.at(i).id<<endl;
    }
    return 0;
}

 

最后欢迎大家访问我的个人网站: 1024s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值