#P2020. 排队.填空题

排队.填空题

题目描述

在很多场合,我们都需要排队,比如超市付款,医院看病,就餐等等。“尊老爱幼”是中华名族的传统美德,所以在排队的过程中,遇到老人、幼儿我们应该主动让他们排在前面。

请按以下 4 条规则编写一个排队的程序。

(1) 老人(年龄 ≥ 60 岁)和幼儿(年龄 ≤ 6 岁) 比其他人( 6 岁 < 年龄 < 60 岁 )优先排在队伍的前面,且所有幼儿排在所有老人的前面。

(2) 老人按年龄从大到小的顺序排队,年龄大的优先,年龄相同时,先到的人排在前面。

(3) 幼儿按年龄从小到大的顺序排队,年龄小的优先,年龄相同时,先到的人排在前面。

(4) 其他人只按到达的先后顺序排队。

输入格式

第 1 行一个整数 n , (0 < n < 100000 ) 表示排队的总人数。

第 2 行到第 n+1 行, 按照到达的先后顺序给出了每个人的基本信息。每行两个整数,第一个整数表示这个人的编号(编号保证不会重复,但不保证连续),第二个整数表示这个人的年龄。

输出格式

共 n 行。每行一个人的编号,表示从前往后的排队结果。

样例

8
1 14
3 6
4 5
5 62
11 48
17 25
21 60
13 62
4
3
5
13
21
1
11
17

完成程序

#include<bits/stdc++.h>
using namespace std;
struct people
{
	int id,age,type;
}x[100001];
填空(1) cmp(填空(2) i, 填空(2) j)
{
	if(i.type!=j.type)
		return 填空(3) ;
	else if (i.type==3)
		return i.id<j.id ;
	else if (i.type==1)
		return 填空(4) ||  (填空(5) && i.id<j.id ) ;
	else if (i.type==2)
		return 填空(6) ||( 填空(7)&&i.id<j.id );
}
int main()
{
	int n,i;
	scanf("%d",&n);
	
	for(i=1;i<=n;i++)
	{
		scanf("%d%d",&x[i].id,&x[i].age);
		
		if(x[i].age<=6)
			x[i].type=1;
		else if(x[i].age>=60) 
			x[i].type=2;
		else
			x[i].type=3;
	}
	sort(填空(8), 填空(9), 填空(10) );

	for(i=1;i<=n;i++)
		printf("%d\n",x[i].id);

	return 0;
}

填空(1): {{ input(1) }}

填空(2): {{ input(2) }}

填空(3): {{ input(3) }}

填空(4): {{ input(4) }}

填空(5): {{ input(5) }}

填空(6): {{ input(6) }}

填空(7): {{ input(7) }}

填空(8): {{ input(8) }}

填空(9): {{ input(9) }}

填空(10): {{ input(10) }}