题目描述
There are many people’s name and birth in a list.Your task is to print the name from young to old.(There is no pair of two has the same age.)
Input
First line contains a single integer T≤100 which denotes the number of test cases.
For each test case, there is an positive integer n(1≤n≤100) which denotes the number of people,and next n lines,each line has a name and a birth’s year(1900-2015) separated by one space.
The length of name is positive and not larger than 100
.Notice name only contain letter(s),digit(s) and space(s).
Output
For each case, output n
lines.
Sample Input
2
1
FancyCoder 1996
2
FancyCoder 1996
xyz111 1997
Sample Output
FancyCoder
xyz111
FancyCoder
坑点
.Notice name only contain letter(s),digit(s) and space(s).
注意这一句话,意思就是名字内部可能有字母,数字,空格。有空格所以正常的输入是不行的。
我的方法是输入一行,然后以后面四个字符作为birth,前面去掉最后的空格之后作为名字。
AC代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<string>
#include<vector>
using namespace std;
int t , n ;
struct Node{
string name;
int birth;
Node(string a , int b ){
name = a;birth = b;
}
Node(){
}
};
vector<Node> vec;
bool cmp(Node a , Node b){
return a.birth>b.birth;
}
int main(){
int i , j ;
int t;
cin>>t;
while(t--){
cin>>n;
getchar();
string nam , str , bir;
vec.clear();
int birth;
for(i = 1 ; i <= n ; i ++ ){
getline(cin , str);
nam.assign(str , 0 , str.length()-5);
bir.assign(str , str.length()-4 , str.length());
birth = atoi(bir.c_str());
vec.push_back(Node(nam , birth));
}
sort(vec.begin() , vec.end() , cmp);
for(i = 0 ; i < n ; i ++ ){
cout<<vec[i].name<<endl;
}
}
return 0;
}