问题标题: 酷町堂:2733、1332

0
0
已解决
王月
王月
资深守护
资深守护

2733   生日

经验值:0 时间限制:1000毫秒

题目描述 Description

喵喵君想调查学校的酷町组的每个同学的生日,并按照出生日期从大到小的顺序排序。但喵喵君最近作业很多,没有时间,所以请你帮她排序。

输入描述 Input Description

第 1 行为酷町组总人数 n ;

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

输出描述 Output Description

有 n 行,即 n 个出生日期从大到小同学的姓名。(如果有两个同学生日相同,输入**前的同学先输出)

样例输入 Sample Input

3 Yangchu 1992 4 23 Qiujingya 1993 10 13 Luowen 1991 8 1

样例输出 Sample Output

Qiujingya Yangchu Luowen

数据范围及提示 Data Size & Hint

1<n<100
s的长度<20

 

 

 

 

WA90

#include<bits/stdc++.h>
using namespace std;
struct stu{
    string name;
    int y;
    int m;
    int d;
    int f;
}a[110];
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;
    }
    if(a.name!=b.name){
        return a.name>b.name;
    }
    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;
}

1332   调查年龄

经验值:0 时间限制:1000毫秒

题目描述 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

 

 

 

 

WA 0

#include<bits/stdc++.h>
using namespace std;
struct stu{
    string name;
    int y;
    int m;
    int d;
    int f;
}a[110];
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;
    }
    if(a.name!=b.name){
        return a.name>b.name;
    }
    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
已采纳
李显晨
李显晨
中级启示者
中级启示者

第一题排序函数错了:

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.pos<b.pos;
} 

第二题也是排序函数错了:

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.pos>b.pos;
} 

 

0
0
我要回答