生日相同

简介: 题目链接:http://ica.openjudge.cn/struct/1/总时间限制: 1000ms 内存限制: 65536kB描述在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。

题目链接:http://ica.openjudge.cn/struct/1/

总时间限制: 1000ms 内存限制: 65536kB
描述

在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。

输入
第一行为整数n,表示有n个学生,n ≤ 180。此后每行包含一个字符串和两个整数,分别表示学生的名字(名字第一个字母大写,其余小写,不含空格,且长度小于20)和出生月(1 ≤ m ≤ 12)日(1 ≤ d ≤ 31)。名字、月、日之间用一个空格分隔
输出
每组生日相同的学生,输出一行,其中前两个数字表示月和日,后面跟着所有在当天出生的学生的名字,数字、名字之间都用一个空格分隔。对所有的输出,要求按日期从前到后的顺序输出。 对生日相同的名字,按名字从短到长按序输出,长度相同的按字典序输出。如没有生日相同的学生,输出”None”
样例输入
6
Avril 3 2
Candy 4 5
Tim 3 2
Sufia 4 5
Lagrange 4 5
Bill 3 2
样例输出
3 2 Tim Bill Avril
4 5 Candy Sufia Lagrange
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 struct stu
 5 {
 6     int month,day;//月,日
 7     char name[25]; 
 8 };
 9 struct obj
10 {
11     int month,day,count;//该日期生日的人数是count 
12 };
13 int cmp(const void *a,const void *b)//需要交换的返回1,否则返回-1或0 
14 {
15     struct stu x,y;
16     int len1,len2;
17     x=*((struct stu *)a);
18     y=*((struct stu *)b);
19     if(x.month>y.month)return 1;//需要交换 
20     else if(x.month<y.month) return 0;//不需要交换 
21     else if(x.day>y.day)return 1;
22     else if(x.day<y.day) return 0;
23     else 
24     {
25         len1=strlen(x.name);
26         len2=strlen(y.name);
27         if(len1>len2)return 1;
28         else if(len1<len2)return 0;
29         else return strcmp(x.name,y.name);//长度相等,按字典序升序排序。返回正数表示要交换,返回0或负数不交换 
30     }
31 }
32 int main(int argc, char *argv[])
33 {
34     int n,i,j,k,t;
35     struct stu a[200];
36     struct obj b[200];
37     freopen("data.in","r",stdin);
38     
39     scanf("%d",&n);
40     for(i=0;i<n;i++)
41     {
42         scanf("%s%d%d",&a[i].name,&a[i].month,&a[i].day);
43     }
44     
45     qsort(a,n,sizeof(struct stu),cmp);
46     //for(i=0;i<n;i++)
47         //printf("%d %d %s\n",a[i].month,a[i].day,a[i].name);
48     
49     b[0].month=a[0].month;
50     b[0].day=a[0].day;
51     b[0].count=1;
52     j=0;
53     for(i=1;i<n;i++)
54     {
55         if(a[i].month==b[j].month&&a[i].day==b[j].day) b[j].count++;
56         else
57         {
58             j++;
59             b[j].month=a[i].month;
60             b[j].day=a[i].day;
61             b[j].count=1;
62         }
63     }
64     
65     if(j==(n-1)) printf("None\n");
66     else
67     {
68         k=0;
69         for(i=0;i<=j;i++)
70         {
71             if(b[i].count>1)
72             {
73                 printf("%d %d",b[i].month,b[i].day);
74                 for(t=0;t<b[i].count;t++)
75                 {
76                     printf(" %s",a[k].name);
77                     k++;
78                 }
79                 printf("\n");
80             }
81             else k++;
82         }
83     }
84     return 0;
85 }

 

相关文章
|
存储 开发框架 算法
【串口通信】使用C++和Qt设计和实现串口协议解析器(一)
【串口通信】使用C++和Qt设计和实现串口协议解析器
3237 0
|
存储 Linux 网络安全
centos 7.7 安装ceph
centos install ceph
4755 0
|
分布式计算 DataWorks 大数据
离线同步ODPS中多个分区数据
离线同步ODPS中多个分区数据
离线同步ODPS中多个分区数据
|
Arthas 监控 Java
使用阿里arthas 定位oom问题原因
1,最近我们生产服务器在做营销活动的时候突然发生oom,堆内存溢出。这个很让人头疼, 我们开发排查了好长时间,最终找到了问题的所在。这里我先买一个关子,问题的原因大家看完文章就一清二白了。
使用阿里arthas  定位oom问题原因
|
SQL 算法 安全
【MySQL】数据库视图的介绍、作用、创建、查看、删除和修改(附练习题)
文章目录 1 视图的介绍与作用 2 视图的创建 3 视图的修改 4 视图的更新 5 视图的重命名与删除 6 视图的练习 6.1 数据准备 6.2 查询平均分最高的学校名称 写在最后
【MySQL】数据库视图的介绍、作用、创建、查看、删除和修改(附练习题)
|
开发工具 对象存储 git
python通过sdk从minio下载文件时添加进度条
Minio是就地环境下比较好用的对象存储工具,适合在CI/CD流程中使用。主要是因为GIT里用LFS来放大文件不妥,把部署流程中需要的中间文件放minio上,通过SDK去存取文件非常方便。 Minio的上传文件fput_object有progress参数,但是下载文件fget_object默认没有 progress 参数,所以我们需要自己用get_object对代码稍加改造,把下载流和进度条结合在一起
1743 0
python通过sdk从minio下载文件时添加进度条
支付宝技术风险负责人陈亮:把事情做到极致,技术的差异性才会体现出来 | 6月14号云栖夜读
今日的首篇文章,讲述了:“很多事情,说出来很多人都在做,但是只有真正做到极致,技术的差异性才会体现出来”,蚂蚁金服技术风险部研究员陈亮(花名:俊义)在接受 InfoQ 采访时如是说道。在此前的支付宝技术嘉年华,InfoQ 对支付宝数次技术架构升级的见证者及主导架构师陈亮进行了独家采访,首次系统了解稳定支撑“双十一”等多次实战背后的支付宝技术风险体系。
28387 0