当前位置:   article > 正文

L2-042 老板的作息表_l2-042 老板的作息表 分数 25 作者 陈越 单位 浙江大学 zcy.png 新浪微博上有人发

l2-042 老板的作息表 分数 25 作者 陈越 单位 浙江大学 zcy.png 新浪微博上有人发

新浪微博上有人发了某老板的作息时间表,表示其每天 4:30 就起床了。但立刻有眼尖的网友问:这时间表不完整啊,早上九点到下午一点干啥了?

本题就请你编写程序,检查任意一张时间表,找出其中没写出来的时间段。

输入格式:

输入第一行给出一个正整数 N,为作息表上列出的时间段的个数。随后 N 行,每行给出一个时间段,格式为:

hh:mm:ss - hh:mm:ss

其中 hhmmss 分别是两位数表示的小时、分钟、秒。第一个时间是开始时间,第二个是结束时间。题目保证所有时间都在一天之内(即从 00:00:00 到 23:59:59);每个区间间隔至少 1 秒;并且任意两个给出的时间区间最多只在一个端点有重合,没有区间重叠的情况。

输出格式:

按照时间顺序列出时间表中没有出现的区间,每个区间占一行,格式与输入相同。题目保证至少存在一个区间需要输出。


输入样例:

  1. 8
  2. 13:00:00 - 18:00:00
  3. 00:00:00 - 01:00:05
  4. 08:00:00 - 09:00:00
  5. 07:10:59 - 08:00:00
  6. 01:00:05 - 04:30:00
  7. 06:30:00 - 07:10:58
  8. 05:30:00 - 06:30:00
  9. 18:00:00 - 19:00:00

输出样例:

  1. 04:30:00 - 05:30:00
  2. 07:10:58 - 07:10:59
  3. 09:00:00 - 13:00:00
  4. 19:00:00 - 23:59:59

考察 :  数据结构与排序

注意 :  早上开始00:00:00,晚上结束23:59:59

思路 :  

以每一个时间段为'对象'创建数据结构

其属性为: 开始与结束对应的时分秒

接着按照开始时间将每个时间段升序排序

最后逐个判断两个相邻时间段结束跟开始时间是否相同即可


C/C++ (2A代码)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct T{
  4. int a,b,c,d,e,f;
  5. }t[52000];
  6. bool cmp(T x,T y){
  7. if(x.a!=y.a) return x.a < y.a;
  8. if(x.b!=y.b) return x.b < y.b;
  9. return x.c < y.c;
  10. }
  11. int main()
  12. {
  13. int N;
  14. cin >> N;
  15. for(int z=0;z<N;z++) scanf("%d:%d:%d - %d:%d:%d",&t[z].a,&t[z].b,&t[z].c,&t[z].d,&t[z].e,&t[z].f);
  16. sort(t,t+N,cmp);
  17. if(t[0].a!=0 || t[0].b!=0 || t[0].c!=0 ) printf("00:00:00 - %02d:%02d:%02d\n",t[0].a,t[0].b,t[0].c);
  18. for(int z=1;z<N;z++) {
  19. if(t[z].a != t[z-1].d || t[z].b!=t[z-1].e || t[z].c != t[z-1].f){
  20. printf("%02d:%02d:%02d - %02d:%02d:%02d\n",t[z-1].d,t[z-1].e,t[z-1].f,t[z].a,t[z].b,t[z].c);
  21. }
  22. }
  23. if(t[N-1].d!=23 || t[N-1].e!=59 || t[N-1].f!=59 ) printf("%02d:%02d:%02d - 23:59:59\n",t[N-1].d,t[N-1].e,t[N-1].f);
  24. return 0;
  25. }

C/C++ (1A)

  1. #include<iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5. struct OP{
  6. int hour1=0,hour2=0,minute1=0,minute2=0,second1=0,second2=0;
  7. long start=0,end=0;
  8. };
  9. int cmp(OP A,OP B){
  10. return A.start <B.start;
  11. }
  12. int main()
  13. {
  14. int num; //区间数
  15. vector<OP> table;
  16. cin >> num;
  17. OP a;
  18. for(int z=0;z<num;z++){
  19. scanf("%d:%d:%d - %d:%d:%d",&a.hour1,&a.minute1,&a.second1,&a.hour2,&a.minute2,&a.second2);
  20. a.start = a.hour1*10000+a.minute1*100+a.second1;
  21. a.end = a.hour2*10000+a.minute2*100+a.second2;
  22. table.push_back(a);
  23. }
  24. sort(table.begin(),table.end(),cmp);
  25. OP now;
  26. int nn = table.size();
  27. for(int i=0;i<nn;i++){
  28. a = table[i];
  29. if(a.start!=now.end){
  30. printf("%02d:%02d:%02d - %02d:%02d:%02d\n",now.hour2,now.minute2,now.second2,a.hour1,a.minute1,a.second1);
  31. }
  32. now = a;
  33. }
  34. if(now.end!=235959)
  35. {
  36. printf("%02d:%02d:%02d - 23:59:59\n",now.hour2,now.minute2,now.second2);
  37. }
  38. return 0;
  39. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/408552
推荐阅读
相关标签
  

闽ICP备14008679号