十分代码,帮忙看看,谢谢! 题目介绍:1183:病人排队
时间限制: 1000 ms 内存限制: 65536 KB 提交数:47350 通过数: 20801 【题目描述】 病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:
1.老年人(年龄 ≥60 岁)比非老年人优先看病。
2.老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
3.非老年人按登记的先后顺序看病。
【输入】 第1行,输入一个小于100 的正整数,表示病人的个数;
后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度小于10 的字符串表示病人的ID(每个病人的ID各不相同且只含数字和字母),一个整数表示病人的年龄,中间用单个空格隔开。
【输出】 按排好的看病顺序输出病人的ID,每行一个。
【输入样例】 5 021075 40 004003 15 010158 67 021033 75 102012 30 【输出样例】 021033 010158 021075 004003
我的错误代码:
#include<bits/stdc++.h>
using namespace std;
int b[100000],c[100000];
string a[100000];
int sum,num;
int l[10000000],s[1000000];
int main(){
int n;
cin >> n;
for(int i=0;i<n;i++){
cin >> a[i] >> b[i];
c[i]=i;
}
for(int i=0;i<n;i++){
if(b[i]>=60){
l[sum]=c[i];
sum++;
}
else{
s[num]=c[i];
num++;
}
}
for(int j=0;j<sum;j++){
if(b[l[j]]<b[l[j+1]]){
swap(l[j],l[j++]);
}
}
for(int i=0;i<sum;i++){
cout << a[l[i]] << endl;
}
for(int i=0;i<num;i++){
cout << a[s[i]] << endl;
}
return 0;
}