南邮 OJ 1981 参赛选手身高问题II

参赛选手身高问题II

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 512            测试通过 : 63 

比赛描述

2013“华为杯”南京邮电大学大学生团体歌唱大赛即将在南邮举行,本次大赛由南京邮电大学大学生就业与创业指导中心主办,南京邮电大学华为俱乐部(Huawei Club)和南京邮电大学学生职业发展协会(SCDA)联合承办,华为技术有限公司提供赞助。

为了展示南邮学子风采,大赛组委会规定:每个参赛团体由3名同一年级在校本科生或硕士研究生选手组成,3名选手按照身高等差排列,例如参赛团体中3个选手身高依次为160厘米、170厘米、180厘米,则该团体报名成功。

在此次大赛中,每一个参赛团队根据报名先后次序、3个选手身高排列生成一个队名,具体命名方式如下:每一个参赛团队3个选手的身高按照从矮到高的次序组成一个排列,所有这些排列按字典序进行排序,这时排序相同时,再按照报名先后次序确定顺序,对应的参赛团队获得一个顺序编号;“2013hwt”和顺序编号组合即为参赛团队的队名。

举一个例子,有以下5个参赛团队报名信息,相应的顺序编号和队名如下:

报名次序

选手身高信息

顺序编号

队名

1

180 160 170

2

2013hwt2

2

160 180 170

3

2013hwt3

3

170 170 170

4

2013hwt4

4

190 170 180

5

2013hwt5

5

140 150 160

1

2013hwt1

    现在的问题是:给定每一个参赛团队的报名次序、3个选手任意次序的身高值,请你为每一个参赛团队生成队名。

输入

输入包括N+1行,首先给出参赛团队数N,接着根据报名先后次序给出N行,每1行依次给出某个参赛团队报名次序C、3个选手任意次序的身高值,1≤N≤30000,1≤C≤N,身高值不低于140厘米、不高于230厘米。

输出

按照报名先后次序输出N行,每1行依次给出相应参赛团队的报名次序和生成的队名。

样例输入

5
1 180 160 170
2 160 180 170
3 170 170 170
4 190 170 180
5 140 150 160

样例输出

1 2013hwt2
2 2013hwt3
3 2013hwt4
4 2013hwt5
5 2013hwt1

提示

本题纯属虚构,题目中输入数据和输出数据在一行中均以空格分隔。

对给定的字符集或数集中的字符或数规定一个先后关系,在此基础上规定两个排列的先后是从左到右逐个比较对应字符的先后,或者根据给定的数集中的数值大小关系,规定两个排列的先后是从左到右逐个比较对应的数值的大小,即依照字典序给出排列次序。

 

题目来源

SED




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

#define MAX_N 30000
struct team{
	int order;
	int height;
	int out;
}ts[MAX_N];

bool operator<(const team &t1, const team &t2){
	if(t1.height == t2.height){
		return t1.order < t2.order;
	}
	return t1.height < t2.height;
}

bool comp(const team &t1, const team &t2){
	return t1.order < t2.order;
}

int main(){
	int n,i,x,y,z;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d%d%d%d",&ts[i].order,&x,&y,&z);
		if(x<=y && x<=z){
			if(y<=z){
				ts[i].height = x*1000000+y*1000+z;
			}else{
				ts[i].height = x*1000000+z*1000+y;
			}
		}else if(y<=x && y<=z){
			if(x<z){
				ts[i].height = y*1000000+x*1000+z;
			}else{
				ts[i].height = y*1000000+z*1000+x;
			}
		}else{
			if(x<=y){
				ts[i].height = z*1000000+x*1000+y;
			}else{
				ts[i].height = z*1000000+y*1000*x;
			}
		}
	}
	sort(ts,ts+n);
	for(i=0;i<n;i++){
		ts[i].out = i+1;
	}
	sort(ts,ts+n,comp);
	for(i=0;i<n;i++){
		printf("%d 2013hwt%d\n",i+1,ts[i].out);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值