题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1234

Problem Description
每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。现有一堆杂乱的机房签 
到、签离记录,请根据记录找出当天开门和关门的人。 
Input
测试输入的第一行给出记录的总天数N ( > 0 )。下面列出了N天的记录。 
每天的记录在第一行给出记录的条目数M ( > 0 ),下面是M行,每行的格式为 
证件号码 签到时间 签离时间 
其中时间按“小时:分钟:秒钟”(各占2位)给出,证件号码是长度不超过15的字符串。
Output
对每一天的记录输出1行,即当天开门和关门人的证件号码,中间用1空格分隔。 
注意:在裁判的标准测试输入中,所有记录保证完整,每个人的签到时间在签离时间之前, 
且没有多人同时签到或者签离的情况。 
Sample Input
3
1
ME3021112225321 00:00:00 23:59:59
2
EE301218 08:05:35 20:56:35
MA301134 12:35:45 21:40:42
3
CS301111 15:30:28 17:00:10

SC3021234 08:00:00 11:25:25

CS301133 21:45:00 21:58:40

Sample Output
ME3021112225321 ME3021112225321
EE301218 MA301134
SC3021234 CS301133

分析:关键在于如何对签到时间和签退时间进行排序,一种方法是将时间转化为秒在进行排序,另一种方法是将时间定义为字符类型,然后进行字典序排序。简单的说,字典序排序就是将两个字符数组中的元素从左到右挨个进行ASCII码的大小比较。在此介绍第二种。

代码:

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cstring>
  4. using namespace std;
  5. struct People
  6. {
  7. char a[50];
  8. string start;
  9. string end;
  10. // char start[50];
  11. // char end[50];
  12. }N[1001];
  13. bool cmp(People a,People b)
  14. {
  15. return a.start<b.start;//字典序排序 ,逐个比较
  16. //return strcmp(a.start,b.start)<0;//左==右,返回值==0;>,>0;<,<0。如果定义的为char类型数组,就要这样排序。
  17. }
  18. bool cmq(People a,People b)
  19. {
  20. return a.end>b.end;
  21. }
  22. int main()
  23. {
  24. int i,n,k,j,t;
  25. cin>>n;
  26. while(n--)
  27. {
  28. cin>>t;
  29. for(i=0;i<t;i++)
  30. {
  31. cin>>N[i].a;
  32. cin>>N[i].start;
  33. cin>>N[i].end;
  34. }
  35. sort(N,N+t,cmp);
  36. // for(i=0;i<t;i++)
  37. // cout<<N[i].a<<" "<<N[i].start<<" "<<N[i].end<<endl;;
  38. cout<<N[0].a<<" ";
  39. sort(N,N+t,cmq);
  40. cout<<N[0].a<<endl;
  41. }
  42. return 0;
  43. }

结构体+字符串比较大小(HDU1234开门人和关门人 )相关推荐

  1. HDU1234 开门人和关门人【水题】

    开门人和关门人 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  2. HDU1234 开门人和关门人(解法二)【废除!!!】

    本文废除!!! 参考链接:HDU1234 开门人和关门人 问题链接:HDU1234 开门人和关门人. 问题简述:参见上述链接. 问题分析:之前所做的程序质量不高,所以重做该题的题解.上次使用了结构数组 ...

  3. C - 开门人和关门人(结构体+sort)

    C - 开门人和关门人(结构体+sort) Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submi ...

  4. HDU1234 开门人和关门人

    开门人和关门人 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  5. C语言中如何计算结构体的字节大小

    结构体内存对齐 在计算结构体所占字节的大小时,不要直观地累加结构体内成员的字节大小,实际结构体存放在内存中是有一定的规则的,这里涉及的规则就是内存对齐原则. 声明一个结构体stu struct stu ...

  6. 关于C语言——结构体struct的大小是如何计算的

    C语言中的内存是比较复杂的,能够认识了解内存,对学习C语言能有莫大的帮助! 关于结构体的大小有如下规律: 1.结构体的大小是由n个"结构体中最大的那个类型"的大小模块组成(n< ...

  7. struct结构体计算内存大小

    bool 1字节 char 1字节 int 4字节 float 4字节 double 8字节 指针  8字节(32位系统是4字节) 一. 基本原则 1. struct中成员变量的声明顺序,与成员变量对 ...

  8. 关于结构体和联合体大小的计算

    一: 结构体   1:当没有定义 #pragma pack(value) 这种指定 value 字节进行对齐时,   它的计算规则是:整体的大小在满足为最大数据类型所占字节的倍数下要达到所占内存最小. ...

  9. c语言结构体数组内存大小,如何为C语言的结构体数组分配/释放内存?

    如何为C语言的结构体数组分配/释放内存? struct emp { char name[10]; float salary; }; int main(int argc,char* argv[]) { ...

最新文章

  1. matlab 线模式密度,环形腔窄线宽光纤激光器的研究
  2. 10门必看的机器学习免费课程
  3. 辛星php函数,辛星和您用更简略的方式去实现PHP中的验证码
  4. 文件转换shape格式_万能格式转换器!支持200+种文件格式的云转换!
  5. python连接mongodb数据库_python连接mongodb操作数据示例(mongodb数据库配置类)
  6. 调试,是一件有挑战的事情
  7. Loadrunner基本概念解析一
  8. 拳王虚拟项目公社:如何通过知识付费赚钱,知识付费搬运赚钱,虚拟资源付费项目
  9. 设计模式:高性能IO之Reactor模式
  10. 的文件夹结构_用framework7开发APP:6.目录结构
  11. Linux 文本处理工具
  12. VS2015 编译libevent库
  13. Mock Server入门及实践
  14. Flash Builder 4.7 正式版下载、破解
  15. 【RK2206】3. 处理迪文屏事件
  16. mac 关于获取手机信息 终端指令
  17. JavaScript 专题之惰性函数
  18. 椭圆光学性质的几何证明
  19. 安装完linux后要做的几件事。
  20. 让这些浏览器插件和工具来帮你破解突破百度网盘下载速度太慢的难题!

热门文章

  1. 朴素贝叶斯分类器(Navie Bayesian Classifier)中的几个要点(一)
  2. 程序员,选择和努力哪个重要?
  3. PowerDesigner中NAME和COMMENT的互相转换,需要执行语句
  4. Android中利用Jsoup让WebView清除Html标签并让图片适应大小并居中
  5. 移动端双指缩放、旋转
  6. 物联网网络编程和web编程
  7. 剑指Offer_17_树的子结构
  8. The difference between sleep(), wait(), and yield() in human terms.
  9. update-alternatives使用方法
  10. ili9341代码移植注意事项