题目
1. K12549 学籍表整理
题目描述
小科大学里的辅导员一开学就找到小科,让小科帮他整理学生的学籍。辅导员给了一张学籍表,学籍表里是n名学生的信息,每个学生的信息包含:学号、姓名、班级。
由于新的学期有些同学留级了,有些同学被开除了,留级和开除的同学辅导员希望从学籍表上删除掉,并且希望学籍表是按照学号从小到大排序的。
人工进行这整理太耗时了,所以请你编程帮助小科完成这项任务吧。
输入格式
第一行,一个整数n表示学生的人数,n≤10^5
接下来n行,每行描述一个学生的信息,分别表示学号,姓名和班级。学号是不超过9位的整数(不包含前导0),姓名是长度不超过30个字符的字符串,班级是一个1到30之间的整数。每个学生的学号是不重复的
接下来若干行给出留级和被开除的学生的学号
输出格式
输出若干行,输出整理后的学籍表,一个学生信息占一行
输入输出样例
输入样例1:复制
5 20074005 lily 5 20074010 lucy 5 20071007 john 1 20072050 luli 2 20076200 lean 6 20071007
输出样例1:复制
20072050 luli 2 20074005 lily 5 20074010 lucy 5 20076200 lean 6
【耗时限制】1000ms 【内存限制】128MB
解答
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
struct Stu{
string name;
LL num,Class;
}tmp;
bool cmp(const Stu &x,const Stu &y){
return x.Class<y.Class;
}
int main(){
LL n;
vector <Stu> v;
cin>>n;
for(LL i=0;i<n;i++){
cin>>tmp.Class>>tmp.name>>tmp.num;
v.push_back(tmp);
}
LL m;
while(cin>>m){
for(LL i=0;i<v.size();i++){
if(m==v[i].Class){
v.erase(v.begin()+i);
break;
}
}
}
if(!v.empty()){
sort(v.begin(),v.end(),cmp);
for(LL i=0;i<v.size();i++){
cout<<v[i].Class<<" "<<v[i].name<<" "<<v[i].num<<endl;
}
}
return 0;
}
评测记录