博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
week14之A - 猫睡觉问题(真恼人)
阅读量:3951 次
发布时间:2019-05-24

本文共 3077 字,大约阅读时间需要 10 分钟。

题目

众所周知,TT家里有一只魔法喵。这只喵十分嗜睡。一睡就没有白天黑夜。喵喵一天可以睡多次!!每次想睡多久就睡多久╭(╯^╰)╮
喵睡觉的时段是连续的,即一旦喵喵开始睡觉了,就不能被打扰,不然喵会咬人哒[○・`Д´・ ○]
可以假设喵喵必须要睡眠连续不少于 A 个小时,即一旦喵喵开始睡觉了,至少连续 A 个小时内(即A*60分钟内)不能被打扰!
现在你知道喵喵很嗜睡了,它一天的时长都在吃、喝、拉、撒、睡,换句话说要么睡要么醒着滴!
众所周知,这只魔法喵很懒,和TT一样懒,它不能连续活动超过 B 个小时。
猫主子是不用工作不用写代码滴,十分舒适,所以,它是想睡就睡滴。
但是,现在猫主子有一件感兴趣的事,就是上BiliBili网站看的新番。
新番的播放时间它已经贴在床头啦(每天都用同一张时间表哦),这段时间它必须醒着!!
作为一只喵喵,它认为安排时间是很麻烦的事情,现在请你帮它安排睡觉的时间段。
Input
多组数据,多组数据,多组数据哦,每组数据的格式如下:
第1行输入三个整数,A 和 B 和 N (1 <= A <= 24, 1 <= B <= 24, 1 <= n <= 20)
第2到N+1行为每日的新番时间表,每行一个时间段,格式形如 hh:mm-hh:mm (闭区间),这是一种时间格式,hh:mm 的范围为 00:00 到 23:59。注意一下,时间段是保证不重叠的,但是可能出现跨夜的新番,即新番的开始时间点大于结束时间点。

保证每个时间段的开始时间点和结束时间点不一样,即不可能出现类似 08:00-08:00 这种的时间段。时长的计算由于是闭区间所以也是有点坑的,比如 12:00-13:59 的时长就是 120 分钟。

不保证输入的新番时间表有序。

Output
我们知道,时间管理是一项很难的活,所以你可能没有办法安排的那么好,使得这个时间段满足喵喵的要求,即每次睡必须时间连续且不少于
A 小时,每次醒必须时间连续且不大于 B 小时,还要能看完所有的番,所以输出的第一行是 Yes 或者
No,代表是否存在满足猫猫要求的时间管理办法。
然后,对于时间管理,你只要告诉喵喵,它什么时候睡觉即可。

即第2行输出一个整数 k,代表当天有多少个时间段要睡觉

接下来 k 行是喵喵的睡觉时间段,每行一个时间段,格式形如 hh:mm-hh:mm

(闭区间),这个在前面也有定义。注意一下,如果喵喵的睡眠时段跨越当天到达了明天,比如从23点50分睡到0点40分,那就输出23:50-00:40,如果从今晚23:50睡到明天早上7:30,那就输出23:50-07:30。
输出要排序吗?(输出打乱是能过的,也就是说,题目对输出的那些时间段间的顺序是没有要求的)
哦对了,喵喵告诉你说,本题是 Special Judge,如果你的输出答案和 Sample 不太一样,也可能是对的,它有一个判题程序来判定你的答案(当然,你对你自己的答案肯定也能肉眼判断)

sample input

12 12 123:00-01:003 4 307:00-08:0011:00-11:0919:00-19:59

output

Yes

1
01:07-22:13
No

解释

这道题我是这样想的,对于字符串的时间,我们并不好处理,然而对于数字,那么进行加减就方便多了。所以,首先我们把输入的字符串转化为数字,然后对时间进行运算。运算完成后,得到了结果,再把结果转化为字符串形式输出。具体的见代码,注释很完整

字符串转化为数字,数字转化为字符串:

例如:将数字转化为字符串,通常用于连long long都无法解决的数字
问:字符串转化为数字,求一个字符串每个字符加起来的和

#include
#include
#include
using namespace std;int main(){
int n,j=0,sum=0; string str("2333");//字符串 char ch[10000];//随便写个范围,根据题目而修改 cin>>n; while(n){
ch[j++]=(n%10)+'0';//数字转化为字符串,加'0' n=n/10; } int len=strlen(ch);//求刚刚转化的字符串长度,就是求n是几位数 for(int i=1;i<=len;i++)//输出改数 cout<

Codes

#include
#include
#include
using namespace std;int a,b,n;//连续睡觉不少于a小时,连续醒着不超过b小时,n表示醒着时间个数struct table{
int first,last;//first表示起始时间,last结束时间}wak[30],slp[30];//wak表示醒着,slp表示睡着bool cmp(const table &t,const table &tt){
//按照起始时间升序排序 return t.first
>a>>b>>n){
for(int i=0;i
>s;//一个时间段的输入 int th,tm;//字符串转化为数字过程 th=((s[0]-'0')*10+(s[1]-'0')); tm=((s[3]-'0')*10+(s[4]-'0')); wak[i].first=tm+th*60; th=((s[6]-'0')*10+(s[7]-'0')); tm=((s[9]-'0')*10+(s[10]-'0')); wak[i].last=tm+th*60; if(wak[i].last
=a*60+1){ slp[k].first=wak[i].last+1; slp[k].last=wak[i+1].first-1; k++; } } for(int i=0;i
1440&&slp[i].last>1440){ slp[i].first-=1440; slp[i].last-=1440; } } sort(slp,slp+k,cmp);//对睡觉时间排序 slp[k].first=slp[0].first+1440; slp[k].last=slp[0].last+1440; for(int i=0;i
b*60+1){ flag=1;break; } } if(flag==1 || k==0)//如果没有睡觉时间段 cout<<"No"<
=24) sh-=24;//减24因为跨天会造成大于24的情况,所以规范化 if(eh>=24) eh-=24;//数字转化为字符串 ch[1]=(sh%10+'0');ch[0]=(sh/10+'0'); ch[2]=':'; ch[4]=(sm%10+'0');ch[3]=(sm/10+'0'); ch[5]='-'; ch[7]=(eh%10+'0');ch[6]=(eh/10+'0'); ch[8]=':'; ch[10]=(em%10+'0');ch[9]=(em/10+'0'); for(int j=0;j<11;j++)//将字符串输出 cout<

转载地址:http://kcwzi.baihongyu.com/

你可能感兴趣的文章
H5走迷宫小游戏
查看>>
mysql建表 表名与关键字冲突
查看>>
mysql 创建单表外键关联多表
查看>>
postman使用
查看>>
ClassNotFoundException和NoClassDefFoundError的区别
查看>>
Tomcat Connector三种运行模式(BIO, NIO, APR)的比较和优化
查看>>
spring注解@Primary与@Qualifier
查看>>
annotation之@Autowired、@Inject、@Resource三者区别
查看>>
idea启动微服务找不到配置文件
查看>>
Java通过反射机制调用某个类的方法
查看>>
字节跳到面试题
查看>>
Linux查看物理CPU个数
查看>>
Linux学习之网络IO,磁盘io
查看>>
ES7.6.2安装
查看>>
查看jar依赖树
查看>>
idea运行gradle项目
查看>>
es安装ltr插件
查看>>
开源ltr-es-7.6.2代码到本地idea打开出现各种错误总结
查看>>
Requests实践详解&& python通过连接开启https的elasticsearch7 服务器
查看>>
ES查询流程源码解析
查看>>