輸入格式:
多組資料,多組資料,多組資料哦,每組資料的格式如下:
第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 分鐘。
不保證輸入的新番時間表有序。
輸出格式:
我們知道,時間管理是一項很難的活,所以你可能沒有辦法安排的那麼好,使得這個時間段滿足喵喵的要求,即每次睡必須時間連續且不少於 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 不太一樣,也可能是對的,它有乙個判題程式來判定你的答案(當然,你對你自己的答案肯定也能肉眼判斷)
樣例輸入:
12 12 1樣例輸出:23:00-01:00
3 4 3
07:00-08:00
11:00-11:09
19:00-19:59
yes1.定義time型別,記錄小時、分鐘,女兵進行運算子過載101:07-22:13
no
定義period(時間段),記錄開始時間和結束時間,並進行運算子過載
2.具體實現思路:
將每個反開始和結束的時間記錄後,按照每個番開始時間的先後順序進行排序(題目給出不保證輸入的新番時間表有序)。已知睡覺時間不能少於a,工作時間不能少於b。先判斷兩部番之間的空白時間夠不夠a小時(能不能睡一覺),若不夠需要將兩部番合併。
合併之後,需要判斷第二天開始與第一天結束時間間隔夠不夠a小時(睡覺)。這裡分兩種情況,一是上述合併之後一天只剩乙個時間段,若不夠a小時,直接輸出「no"即可(再合併貓就不睡覺了==);若是不止乙個時間段,那麼判斷不夠a小時後,前一天最後一段與第二天的第一段時間可以合併。
上述全部合併完成之後,判斷醒著的時間是否滿足不超過b,這是最後一步判斷了
最後是輸出,注意輸出的時間不要正好卡著記錄的時間端的邊界(加減一分鐘)
3.最後需要注意的就是一些對時間的小操作,例如加一分鐘之後分鐘變成60,那麼就要讓小時++,分鐘等於0
#include
#include
using
namespace std;
struct time
time
(int a,
int b)
bool
operator
<
(const time &p)
time operator-(
const time &p)
if(t.mt.m-
=p.m;t.h-
=p.h;
return t;}}
;struct period
period
(time s,time e)
bool
operator
<
(const period &p)};
int a,b,n,t1,t2,t3,t4,cnt,flag;
period p[24]
;time&
cut(time &t)
t.m--
;return t;
}time&
add(time &t)
if(t.h==
24) t.h=0;
return t;
}int
main()
sort
(p+1
,p+1
+cnt)
;//按開始時間排序
//將兩番間隔時間不夠a的時間段合併
for(
int i=
1;i//判斷第二天開始與第一天結束間隔是否不夠a
//最後剩餘乙個時間段
if(cnt==
1&&p[1]
.start-p[1]
.end//最後剩餘區間不止一段
//若不夠a,需要合併
if(cnt!=
1&&p[1]
.start-p[cnt]
.end//判斷活動時間是否超過b
for(
int i=
1;i<=cnt;i++)}
//連續醒時間大於b if(
!flag)
printf
("yes\n%d\n"
,cnt)
; time ss,ee;
for(
int i=
1;i) ss=
add(p[cnt]
.end)
;ee=
cut(p[1]
.start)
;printf
("%02d:%02d-%02d:%02d\n"
,ss.h,ss.m,ee.h,ee.m);}
return0;
}
Week 14 限時大模擬 貓睡覺問題
多組資料,多組資料,多組資料哦,每組資料的格式如下 第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。注意一...
week14 限時大模擬A貓睡覺問題
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 ...
Week14 限時大模擬 A 貓睡覺問題
眾所周知,tt家裡有乙隻魔法喵。這只喵十分嗜睡。一睡就沒有白天黑夜。喵喵一天可以睡多次!每次想睡多久就睡多久 喵睡覺的時段是連續的,即一旦喵喵開始睡覺了,就不能被打擾,不然喵會咬人噠 可以假設喵喵必須要睡眠連續不少於 a 個小時,即一旦喵喵開始睡覺了,至少連續 a 個小時內 即a 60分鐘內 不能被...