【洛谷P1104】生日

题目描述

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

输入输出格式

输入格式:

有2行,第1行为OI组总人数n;第2行至第n+1行分别是每人的姓名s、出生年y、月m、日d。

输出格式:

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

输入输出样例

输入样例#1

3

Yangchu 1992 4 23

Qiujingya 1993 10 13

Luowen 1991 8 1

输出样例#1

Luowen

Yangchu

Qiujingya

说明

数据规模

1<n<100

length(s)<20

算法:

排序

分析:

这道题讲了要我们把n个人的生日按从老到幼排个序,然后要注意一点,就是后输入(编号大的人)算更老。

这道题很水,用简单的排序就可以解决。

C++的STL这是非常好用,自己写个comp函数再套用sort就可以了。Comp函数假如三目运算符写得很晕的话直接用if就可以了。

另外,吐槽一下ccf的Guide,虽然可以编译Pascal/c/c++的程序,但是没有括号匹配,奇怪的换行,函数的搭配。今天不知道为什么作死用了一下,下次还是用Dev好。

上代码:

 #include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std; int n;
struct node
{
char s[]; //名字
int no,y,m,d; //编号,年,月,日
}a[]; inline int read() //读入优化
{
int x=,f=;
char c=getchar();
while (c<||c>)
f=c=='-'?-:,c=getchar();
while (c>=&&c<=)
x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
} inline bool comp(const node &a,const node &b) //比较函数
{
if (a.y<b.y) //小的或者大的就直接返回值,
return ; //否则就代表这一项相等
if (a.y>b.y)
return ;
if (a.m<b.m)
return ;
if (a.m>b.m)
return ;
if (a.d<b.d)
return ;
if (a.d>b.d)
return ;
return a.no>b.no; //最后判断同一天的情况
} int main()
{
int i;
n=read();
for (i=;i<=n;i++)
{
scanf("%s",a[i].s);
a[i].y=read();
a[i].m=read();
a[i].d=read();
a[i].no=i; //记录编号
}
sort(a+,a+n+,comp);
for (i=;i<=n;i++)
puts(a[i].s); //puts可以直接输出内容加换行,比printf快
return ;
}

嗯,就这样了。

上一篇:Struts2的核心运行流程,原理图解


下一篇:中文man帮助安装