#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) }}