资深守护
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;
}
中级启示者
第一题排序函数错了:
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;
}
资深光能