专栏文章
B2160 病人排队
B2160题解参与者 13已保存评论 12
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 12 条
- 当前快照
- 1 份
- 快照标识符
- @mip6ra9z
- 此快照首次捕获于
- 2025/12/03 07:04 3 个月前
- 此快照最后确认于
- 2025/12/03 07:04 3 个月前
欢迎报名洛谷网校,期待和大家一起进步!
本题考察结构体,排序。
我们使用结构体存储每位病人的信息:字符串
CPPid 表示病人的 ID,整数 ag 表示病人的年龄,整数 rk 表示登记顺序(越小越早):struct P {
string id;
int ag;
int rk;
};
本题的关键在于排序规则。对于第 个人和第 个人来说:
- 如果 不是老年人,而 是老年人,则需要交换;
- 如果 都是老年人,则当下列:
- 的年龄小于 ;
- 和 年龄相等,但是 来的比 晚
两个条件满足其一,则需要交换;
使用冒泡排序的参考代码:
CPPfor (int i = 1; i <= n-1; ++i) {
for (int j = 1; j <= n-i; ++j) {
bool sw = false;
bool sen1 = (a[j].ag >= 60);
bool sen2 = (a[j+1].ag >= 60);
if (sen2 && !sen1)
sw = true;
else if (sen1 && sen2) {
if (a[j].ag < a[j+1].ag) sw = true;
else if (a[j].ag == a[j+1].ag && a[j].rk > a[j+1].rk)
sw = true;
}
if (sw)
swap(a[j], a[j+1]);
}
}
如果使用
CPPsort 进行结构体排序,则参考的自定义比较函数如下:bool cmp(P x, P y) {
bool sx = (x.ag >= 60);
bool sy = (y.ag >= 60);
if (sx != sy) return sx;
if (sx && sy) {
if (x.ag != y.ag) return x.ag > y.ag;
return x.rk < y.rk;
}
return x.rk < y.rk;
}
相关推荐
评论
共 12 条评论,欢迎与作者交流。
正在加载评论...