A problem of sorting
Accepts: 445
Submissions: 1706
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
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.
Sample Input
2 1 FancyCoder 1996 2 FancyCoder 1996 xyz111 1997
Sample Output
FancyCoder xyz111 FancyCoder
分析:只能说很坑很坑,名字不仅中间可以有空格,开头也可由空格。
#include <iostream> #include <cstdio> #include <cstring> #include <stack> #include <queue> #include <map> #include <set> #include <vector> #include <cmath> #include <algorithm> using namespace std; const double eps = 1e-6; const double pi = acos(-1.0); const int INF = 0x3f3f3f3f; const int MOD = 1000000007; #define ll long long #define CL(a) memset(a,0,sizeof(a)) struct node { int num; char name[110]; }s[110]; int cmp(node a, node b) { return a.num>b.num; } int main () { int T,n; char ch[110]; scanf ("%d",&T); while (T--) { scanf ("%d",&n); getchar(); for (int i=0; i<n; i++) { gets(ch); int l=strlen(ch); s[i].num=(ch[l-4]-'0')*1000+(ch[l-3]-'0')*100+(ch[l-2]-'0')*10+ch[l-1]-'0'; ch[l-5]='\0'; strcpy(s[i].name, ch); } sort(s, s+n, cmp); for (int i=0; i<n; i++) { puts(s[i].name); } } return 0; }