Source : hdu 5427 A problem of sorting
http://acm.hdu.edu.cn/showproblem.php?pid=5427
Problem Description
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.
题意
给n个人的年龄排个序,注意姓名会有空格
示例
Sample Input
2
1
FancyCoder 1996
2
FancyCoder 1996
xyz111 1997
Sample Output
FancyCoder
xyz111
FancyCoder
思路
熟练map容器和string.substr的秒出,注意PE!
标准C++中string类的用法总结
http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html
参考代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<sstream>
#include<vector>
#include<map>
#include<climits>
#define clr(k,v) memset(k,v,sizeof(k))
#define ll long long
#define eps 1e-8
using namespace std;
int n,year;
string s,ss,S;
map<int,string>mp;
map<int,string>::reverse_iterator it;
char str[200];
int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
#endif // ONLINE_JUDGE
int T;cin>>T;
while(T--){
mp.clear();
scanf("%d",&n);
getchar();
for(int i = 0; i < n; ++ i){
getline(cin,s);
ss = s.substr(s.size()-4,4);//提取字串
year = atoi(ss.c_str());//char[]转int
s = s.substr(0,s.size()-5);//从0开始的n个字符组成的字串
mp[year] = s;
}
for(it = mp.rbegin();it!=mp.rend(); ++ it){
cout<<it->second<<endl;
}
}
return 0;
}
- 加粗
Ctrl + B
- 斜体
Ctrl + I
- 引用
Ctrl + Q
- 插入链接
Ctrl + L
- 插入代码
Ctrl + K
- 插入图片
Ctrl + G
- 提升标题
Ctrl + H
- 有序列表
Ctrl + O
- 无序列表
Ctrl + U
- 横线
Ctrl + R
- 撤销
Ctrl + Z
- 重做
Ctrl + Y