第十四周模測 貓睡覺問題

2021-10-06 11:26:50 字數 2892 閱讀 5090

一、題目二、輸入

多組資料,多組資料,多組資料哦,每組資料的格式如下:

第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 不太一樣,也可能是對的,它有乙個判題程式來判定你的答案(當然,你對你自己的答案肯定也能肉眼判斷)。

四、樣例輸入輸出

input

12 12 1

23:00-01:00

3 4 3

07:00-08:00

11:00-11:09

19:00-19:59

output

yes

101:07-22:13

no

五、解題思路

題目要求找到所有睡覺的時間段,直接查詢不便,所以選擇找到所有不能睡覺的時間段。

將時間全部轉為分鐘計時,方便比較和運算。

因為跨天的時間段不好處理,所以首先對時間段進行排序。再講第一段時間+24h新增成最後乙個時間段,轉為48小時制。

使用deque對這些不能睡覺的時間段進行歸併,如果兩個時間段中間不能睡覺,則將這兩個時間段合併在一起,合併結果繼續放入deque中。否則則將前乙個時間段取出,後乙個放回deque,直至將所有時間段取出。

這樣的話最短的睡覺時間是可以滿足的,下一步判斷這些不能睡覺的時間段是否小於醒著的最長時間即可。

六、**樣例

#include

#include

#include

#include

#include

#include

using

namespace std;

int a,b,n;

string s;

struct time};

deque dq;

vector p;

void

init()

void

out2

(int x)

void

out(

int l,

int r)

h2=r/

60; m2=r-h2*60-

1;if(m2<0)

out2

(h1)

;cout<<

":";

out2

(m1)

;cout<<

"-";

out2

(h2)

;cout<<

":";

out2

(m2)

;cout<}void

solve()

sort

(dq.

begin()

,dq.

end())

;//排序處理

time t=dq.

front()

; t.l+=24

*60;t.r+=24

*60; dq.

push_back

(t);

//最早的時間段新增至最後

time t1,t2;

while

(true

) t2=dq.

front()

;dq.

pop_front()

;if(t2.l-t1.r<

(a*60+1

))else

}//遍歷vector

for(

int i=

0;isize()

;i++)}

cout<<

"yes"

0,end=0;

cout

-1

0).r;for

(int i=

1;isize()

;i++)}

intmain()

return0;

}

第十四周小結

這一周,我們分到了新的學習場地 609 我們組全員搬來了這裡。609在院裡被叫做 眾創空間 這裡不僅有著更好的學習條件,還存放著我們院裡的榮譽,一張一張的獎狀,還有精美的證書,讓我對信工院有了新的認識。同時,在日常生活中我也有一些自己的心得。一 執行力 結果很重要 之前 給我們在小組的所有成員開了乙...

第十四周總結

一.學習 今天很開心,因為我成功的做出了我人生的第乙個比較完整全面的頁面,雖然用的都是一些很簡單的 但那也是我花了乙個晚上做出來的,是我用這段時間所學的前端知識做出來的。雖然當時已經很晚了,但我絲毫感覺不到睡意,心中只有乙個目標,那就是今晚一定要完成它。或許對別人來說這不算什麼,但那張頁面被注入的精...

第十四周總結

又是新的一周,新的一周是新的起航,是夢的開始,每天的生活不需要過的多麼驚濤駭浪,只要我們是平平淡淡 腳踏實地 按照自己的追求走過的那就會有價值,就值得回憶。這周依舊平平淡淡,每天還是遵循自己的計畫一步步走過來的,最震撼的一件事就是我們搬到了609學習,可能是新環境的原因,這裡的學習氛圍相當好,條件也...