问题标题: 酷町堂:1332怎么做啊!!

0
0
已解决
邵悦媛
邵悦媛
新手光能
新手光能

题目详情

提交记录

问题反馈

 

1332   调查年龄经验值:0

题目描述 Description

酷町堂想调查学校每个同学的生日,然后将同学们按照年龄从大到小的顺序进行排序。

输入描述 Input Description

有2行,

第1行为总人数n(n<=10000);

第2行至第n+1行分别是每人的姓名s、出生年份y、出生月份m、出生日d。

输出描述 Output Description

有n行,

排序后从大到小同学的姓名。(需要注意的是如果有两个同学生日相同,输入靠后的同学优先输出)

样例输入 Sample Input

3 zhang 1992 4 23 wang 1993 10 13 bai 1991 8 1

样例输出 Sample Output

bai zhang wang

我的85分代码:

#include<iostream>
#include<cmath>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
struct stu{
    string name;
    long long y;
    long long m;
    long long d;
    long long f; 
}a[110010];
bool cmp(stu a,stu b)
{
       if (a.y!=b.y)
        return a.y>b.y; 
      if (a.m!=b.m)
        return a.m>b.m; 
      if (a.d!=b.d)
        return a.d>b.d; 
        return a.f<b.f;
      } 
int main()
{   
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].name>>a[i].y>>a[i].m>>a[i].d;
        a[i].f=i;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++)
    {
        cout<<a[i].name<<endl;
    }   
    return 0;
}

快速!


0
已采纳
杜智宸
杜智宸
中级光能
中级光能
  • if (a.y!=b.y)
  • return a.y<b.y;
  • if (a.m!=b.m)
  • return a.m<b.m;
  • if (a.d!=b.d)
  • return a.d<b.d;
  • return a.f>b.f;
  • }
杜智宸在2020-09-26 11:31:46追加了内容

不对你打我

我要回答