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
/** *@author houyong * */ #include<algorithm> #include<iostream> #include<stdio.h> #include<stdlib.h> #include<vector> //#define LOCAL using namespace std; bool cmp(vector<int> a,vector<int> b) { if(a[0]!=b[0]) return a[0]>b[0]; else if(a[0]==b[0] && a[1]!=b[1]) return a[1]>b[1]; else return a[2]<b[2]; } int main() { #ifdef LOCAL freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); #endif // LOCAL int T,j,i,k,k1; scanf("%d", &T); //T个人数据 vector<vector<int> > vec; //vec里存放T个人的测试数据 //直接push_back,不用初始化大小 for(j=0;j<T;j++) { vector<int> v0(3,0);//下面要用下标访问,则要初始化大小 for(i=0;i<3;i++) { scanf("%d", &v0[i]); } vec.push_back(v0); } vector<vector<int> > vec0 =vec; sort(vec.begin(),vec.end(),cmp); for(k=0;k<T;k++) { for(k1=0;k1<T;k1++) { if(vec[k] == vec0[k1]) cout<<k1+1<<endl; } } return 0; }