A problem of sorting
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1021 Accepted Submission(s): 431
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
没想到名字可以是多个单词组成,结果一直wrong了!
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>
#include<iostream>
#include<string>
#include<algorithm>
#include<set>
#include<vector>
#include<queue>
#include<map>
#include<numeric>
#include<stack>
#include<list>
const int INF=1<<30;
const int inf=-(1<<30);
const int MAX=100010;
using namespace std;
struct data
{
char x[110];
int y;
} a[110];
bool comp(data x,data y)
{
return x.y>y.y;
}
int main()
{
int T,n;
cin>>T;
while(T--)
{
cin>>n;
getchar();
char str[110];
for(int i=0; i<n; i++)
{
cin.getline(str,110);
int d=strlen(str);
a[i].y=str[d-4]*1000+str[d-3]*100+str[d-2]*10+str[d-1];
d=d-5;
str[d]='\0';
strcpy(a[i].x,str);
}
sort(a,a+n,comp);
for(int i=0; i<n; i++)
cout<<a[i].x<<endl;
}
}