首页 > 其他分享 >团体天梯练习 L2-042 老板的作息表

团体天梯练习 L2-042 老板的作息表

时间:2023-04-20 22:26:16浏览次数:36  
标签:00 59 int 30 typedef L2 天梯 include 042

L2-042 老板的作息表

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

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

输入格式:

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

\(hh:mm:ss - hh:mm:ss\)

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

输出格式:

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

输入样例:

8
13:00:00 - 18:00:00
00:00:00 - 01:00:05
08:00:00 - 09:00:00
07:10:59 - 08:00:00
01:00:05 - 04:30:00
06:30:00 - 07:10:58
05:30:00 - 06:30:00
18:00:00 - 19:00:00

输出样例:

04:30:00 - 05:30:00
07:10:58 - 07:10:59
09:00:00 - 13:00:00
19:00:00 - 23:59:59


解题思路

起初我自己的想法时,将开一个 \(24*60*60\) 的数组,用来记录每个时间点是否已经存在于这个时间表中,然后再使用双指针算法,如果当前左指针指向的时间点未被标记,那么说明此时间点不存在于时间表中,然后让右指针一直向右搜索,直到被标记也就是存在于时间表中的一个时间点,最后将左右指针此时停留在的时间区间作为一段不存在于时间表中的答案输出。这种方法比较繁琐,而且反而绕了弯路,最关键的是,最后没有拿到全分,因为没有样例,不太清楚是哪个地方出了问题。

正确且比较简单的做法是,将所有给出的时间段进行排序,然后所有出现断点的地方,都将这个时间段进行输出。不过需要将 {"", "\(00:00:00\)"} 和 {"\(23:59:59\)", ""}放入数组中一起进行排序,假如某个答案时间段是以 "\(00:00:00\)" 开始或者以 "\(23:59:59\)" 结束的,如果不预先将这两个时间点放入数组中,那么这个答案时间段会被遗漏。

/*   一切都是命运石之门的选择  El Psy Kongroo  */
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<set>
#include<bitset>
#include<cmath>
#include<functional>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<int, pii> piii;
typedef pair<double, double> pdd;
typedef pair<string, int> psi;
//typedef __int128 int128;
#define PI acos(-1.0)
#define x first
#define y second
//int dx[4] = {1, -1, 0, 0};
//int dy[4] = {0, 0, 1, -1};
const int inf = 0x3f3f3f3f, mod = 1e9 + 7;


int n;
typedef pair<string, string> pss;
vector<pss> t;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

    cin >> n;
    while(n -- ){
        string a, s, b; cin >> a >> s >> b;
        t.push_back({a, b});
    }
    t.push_back({"", "00:00:00"});  //放入一天的起始时间
    t.push_back({"23:59:59", ""});  //放入一天的结束时间

    sort(t.begin(), t.end());  //排序 pair为双关键字排序

    for(int i = 0; i < (int)t.size() - 1; i ++ )
        if(t[i].y != t[i + 1].x)   //只输出时间出现断点的地方 即答案
            cout << t[i].y << " - " << t[i + 1].x << endl;

    return 0;
}

标签:00,59,int,30,typedef,L2,天梯,include,042
From: https://www.cnblogs.com/MAKISE004/p/17338550.html

相关文章

  • 西南民族大学 2023 天梯自主训练 4
    西南民族大学2023天梯自主训练4 多项式A除以B思路:a表示被除多项式,b表示除数多项式,一次运算的商的项p为a的最高项-b的最高项,商的系数q为a的最高项的系数除以b的最高项的系数,将所有a中项数和b的项数乘p后相同的系数减去b项的系数乘q(...haoluan...看图吧) #include<bits/s......
  • 团体天梯练习 L2-039 清点代码库
    L2-039清点代码库上图转自新浪微博:“阿里代码库有几亿行代码,但其中有很多功能重复的代码,比如单单快排就被重写了几百遍。请设计一个程序,能够将代码库中所有功能重复的代码找出。各位大佬有啥想法,我当时就懵了,然后就挂了。。。”这里我们把问题简化一下:首先假设两个功能模块......
  • 团体天梯练习 L2-038 病毒溯源
    L2-038病毒溯源病毒容易发生变异。某种病毒可以通过突变产生若干变异的毒株,而这些变异的病毒又可能被诱发突变产生第二代变异,如此继续不断变化。现给定一些病毒之间的变异关系,要求你找出其中最长的一条变异链。在此假设给出的变异都是由突变引起的,不考虑复杂的基因重组变异......
  • 团体天梯练习 L2-037 包装机
    L2-037包装机一种自动包装机的结构如图1所示。首先机器中有\(N\)条轨道,放置了一些物品。轨道下面有一个筐。当某条轨道的按钮被按下时,活塞向左推动,将轨道尽头的一件物品推落筐中。当\(0\)号按钮被按下时,机械手将抓取筐顶部的一件物品,放到流水线上。图2显示了顺序按下按......
  • 西南民族大学 2023 天梯自主训练 3
    西南民族大学2023天梯自主训练3正整数A+B#include<bits/stdc++.h>usingnamespacestd;typedefpair<int,int>PII;constintN=1e3+5,INF=0x3f3f3f3f,Mod=1e6;constdoubleeps=1e-8;typedeflonglongll;stringa,b;intx,y;intmain(){ios::sync_with_st......
  • L2-3 智能护理中心统计
    题目描述:智能护理中心系统将辖下的护理点分属若干个大区,例如华东区、华北区等;每个大区又分若干个省来进行管理;省又分市,等等。我们将所有这些有管理或护理功能的单位称为“管理结点”。现在已知每位老人由唯一的一个管理结点负责,每个管理结点属于唯一的上级管理结点管辖。你需要实......
  • 团体天梯练习 L2-030 冰岛人
    L2-030冰岛人2018年世界杯,冰岛队因1:1平了强大的阿根廷队而一战成名。好事者发现冰岛人的名字后面似乎都有个“松”(son),于是有网友科普如下:冰岛人沿用的是维京人古老的父系姓制,孩子的姓等于父亲的名加后缀,如果是儿子就加\(sson\),女儿则加\(sdottir\)。因为冰岛人口较少,为避......
  • 团体天梯练习 L2-028 秀恩爱分得快
    L2-028秀恩爱分得快古人云:秀恩爱,分得快。互联网上每天都有大量人发布大量照片,我们通过分析这些照片,可以分析人与人之间的亲密度。如果一张照片上出现了\(K\)个人,这些人两两间的亲密度就被定义为\(1/K\)。任意两个人如果同时出现在若干张照片里,他们之间的亲密度就是所有这些......
  • 有关SQL2000的配置的优化
    1.对SQL中实例的内存项的设置     可以通过设置SQL中的一个实例的内存分配,来处理SQL对于内存的使用.例如:如果当前SQL服务器为专用SQL数据服务器,可以将内存设为固定方式(分配足够大的内存空间),可以提高数据服务器的执行效率;    2.对SQL中文件组......
  • 团体天梯练习 L2-027 名人堂与代金券
    L2-027名人堂与代金券对于在中国大学MOOC(http://www.icourse163.org/)学习“数据结构”课程的学生,想要获得一张合格证书,总评成绩必须达到\(60\)分及以上,并且有另加福利:总评分在\([G,100]\)区间内者,可以得到\(50\)元PAT代金券;在\([60,G)\)区间内者,可以得到\(20\)元......