2 1 FancyCoder 1996 2 FancyCoder 1996 xyz111 1997
FancyCoder xyz111 FancyCoder
/************************************************************************/
附上该题对应的中文题
给出一张许多人的年龄和生日表。你需要从年轻到年老输出人们的名字。(没有人年龄相同)
第一行包含一个正整数T(T≤5),表示数据组数。 对于每组数据,第一行包含一个正整数n(1≤n≤100),表示人数,接下来n行,每行包含一个姓名和生日年份(1900-2015),用一个空格隔开。姓名长度大于0且不大于100。注意姓名中只包含字母,数字和空格。
对于每组数据,输出n行姓名。
2 1 FancyCoder 1996 2 FancyCoder 1996 xyz111 1997
FancyCoder xyz111 FancyCoder
出题人的解题思路:
选择任意喜欢的排序方法即可。注意名字中可能有空格。
说实话,这题还是比较简单的,初看,只要按年份从大到小排序就可以了#pragma comment(linker, "/STACK:1024000000,1024000000") #include<stdio.h> #include<string.h> #include<stdlib.h> #include<queue> #include<stack> #include<math.h> #include<vector> #include<map> #include<set> #include<stdlib.h> #include<cmath> #include<string> #include<algorithm> #include<iostream> #define exp 1e-10 using namespace std; const int N = 120; const int inf = 2147483647; const int mod = 2009; struct person { char name[N]; int year; }s[N]; bool cmp(person x,person y) { return x.year>y.year; } int main() { int t,n,i,j,l; scanf("%d",&t); while(t--) { scanf("%d",&n); getchar(); for(i=0;i<n;i++) { s[i].year=0; gets(s[i].name); l=strlen(s[i].name); for(j=l-4;j<l;j++) s[i].year=s[i].year*10+s[i].name[j]-'0'; s[i].name[l-5]='\0'; } sort(s,s+n,cmp); for(i=0;i<n;i++) printf("%s\n",s[i].name); } return 0; }菜鸟成长记