sdnu1028联系人

来源:互联网 发布:小智logo软件 编辑:程序博客网 时间:2024/06/05 19:17

1028.联系人
Time Limit: 1000 MS Memory Limit: 32768 KB
Total Submission(s): 755 Accepted Submission(s): 169
Description
手机联系人通常都可以按姓名进行排列,SYC突发奇想按年龄进行排列,但是其手头没有每个人的年龄,于是将每个联系人的生日输入进了手机。现在请你帮助SYC实现他的愿望,将给定的联系人按年龄从大到小排列(大一天也是大哦~),如果两人同年同月同日生,那么按姓名升序进行排列。
Input
第一行一个整数N,代表手机中有N个联系人。1<=N<=1000
接下来的N行表示每一个联系人的信息,每一行首先是联系人的名称,然后有一个空格,之后是该联系人的生日(月/日/年)。联系人的姓名不会超过50个字符,只包含英文大写字母。生日均是合法的日期,年份为4位,月份和日期为1~2位。
Output
输出N行,每一行显示该联系人的姓名。
Sample Input
5
SYC 1/1/1990
ZZK 3/3/1990
LZC 4/4/1990
LG 02/02/1990
WZ 12/12/1990
Sample Output
SYC
LG
ZZK
LZC
WZ
Source
SDNU ACM-ICPC 2012省队选拔赛

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define N 1001using namespace std;struct people{    char a[50];    int b,c,d;} p[N];bool cmp(people a,people b){    if(a.d<b.d) return true;    else if(a.d==b.d&& a.b<b.b) return true;    else if(a.d==b.d&& a.b==b.b&& a.c<b.c) return true;    else if(a.d==b.d&& a.b==b.b&& a.c==b.c&& strcmp(a.a,b.a)==-1) return true;    else return false;}int main(){    int n;    cin>>n;    for(int i=0; i<n; i++)    {        scanf("%s %d/%d/%d", &p[i].a, &p[i].b, &p[i].c, &p[i].d);    }    sort(p, p+n, cmp);    for(int i=0; i<n; i++)    {        printf("%s\n", p[i].a);    }    return 0;}
原创粉丝点击