牛客網刷題 2019校招 1星 牛牛的鬧鐘

2021-10-05 22:10:30 字數 3124 閱讀 1031

牛牛總是睡過頭,所以他定了很多鬧鐘,只有在鬧鐘響的時候他才會醒過來並且決定起不起床。從他起床算起他需要x分鐘到達教室,上課時間為當天的a時b分,請問他最晚可以什麼時間起床

輸入描述:

每個輸入包含乙個測試用例。

每個測試用例的第一行包含乙個正整數,表示鬧鐘的數量n(n<=100)。

接下來的n行每行包含兩個整數,表示這個鬧鐘響起的時間為hi(0<=a<24)時mi(0<=b<60)分。

接下來的一行包含乙個整數,表示從起床算起他需要x(0<=x<=100)分鐘到達教室。

接下來的一行包含兩個整數,表示上課時間為a(0<=a<24)時b(0<=b<60)分。

資料保證至少有乙個鬧鐘可以讓牛牛及時到達教室。

輸出描述:

輸出兩個整數表示牛牛最晚起床時間。

示例1輸入

35 0

6 07 0

596 59

輸出6 0

疑問:

鬧鐘響的時間是否已排序好?

思路:對鬧鐘響的時間進行排序後,將最玩響的鬧鐘即為max ,

若最晚響的鬧鐘 + 去上課時間 <= 上課時間

此時,max 就是最晚起床時間

否則,不是輸入有問題,這裡想錯了。而是最晚起床時間在鬧鐘響的分布中間,(怎麼找到),最晚起床時間是小於 60*a+b-x 的最大的鬧鐘響的時間。

if(max + <= 60*a+b)

else cout << " 重新輸入";

#include using namespace std;

int main()

cout << t << " " << s;

return 0;

}

case通過率10%。主要問題是鬧鐘響的時間不是排序的,要排序。

#include using namespace std;

int main()

if( (60*a+b - max) < x )

cout << " input is error ";

else

cout << t << " " << s;

return 0;

}

錯誤:3、

#include using namespace std;

int main()

/* 輸入判斷 */

if(max + x <= 60*a+b)

else cout << " 重新輸入";

return 0;

}

沒有輸出?

重新梳理下:

符號表示:

n: 表示n個鬧鐘

h,m:鬧鐘響的時刻

x: 從家到學校時間

a,b: 上課時間

思想:

首先將輸入的鬧鐘響的時間轉化為分鐘後,即times[i],再進行排序,公升序;

last = a,b - x:即最晚的起床時間(不考慮鬧鐘)

若times[i] > last ,排好序後的第 i 個鬧鐘響的時間大於 最晚起床時間,則返回前乙個鬧鐘響的時間,即實際最晚起床時間。

#include #include #include using namespace std;

int main()

cin >> x >> a >> b;

/* 對輸入的鬧鐘響的時間 排序 從小到大公升序*/

sort(times.begin(),times.end());

/* 理論上最晚起床時間*/

int last = 60 * a + b - x;

/* 在排好序的鬧鐘響的時間裡找最晚的起床時間*/

//for (int i=0;ilast)

//

//}int i = 0;

for (; i < times.size(); i++)

}/* 注意這裡對 i 的處理:i 不是放在for迴圈裡,否則 times[i] i 沒有定義*/

/* 輸出實際上最晚起床時間,即眺出for 迴圈的最晚的times*/

t = times[i] / 60;

s = times[i] % 60;

cout << t << ' ' << s << endl;

}return 0;

}

1. vector使用注意事項

for (int i = 0; i < n; i++)   /* for (int i = 0; i < times.size(); i++)  */

注意這裡的times.push_back();沒有 i 。

2、 寫**前,要寫出偽**,理清輸入順序;迴圈如何巢狀(牛客網有需要迴圈輸入的情況)

3、vector 常用的

排序sort(times.begin(),times.end());times 是建立的 vector 名

使用前要加標頭檔案#include

4、本題關於 vector 的**分析

int i = 0;

for (; i < times.size(); i++)

}/* 注意這裡對 i 的處理:i 不是放在for迴圈裡,否則 times[i] i 沒有定義*/

/* 輸出實際上最晚起床時間,即眺出for 迴圈的最晚的times*/

t = times[i] / 60;

s = times[i] % 60;

cout << t << ' ' << s << endl;

t = times[i] / 60; 這裡的i 是跳出迴圈的前乙個times 值

以下不對。

for (  int i = 0; i < times.size(); i++)

}

新增要改顏色的字型

新增要改顏色的字型

新增要改顏色的字型

新增要改顏色的字型

牛客網刷題 2019校招真題 1 迷路的牛牛

題目描述 牛牛去犇犇老師家補課,出門的時候面向北方,但是現在他迷路了。雖然他手裡有一張地圖,但是他需要知道自己面向哪個方向,請你幫幫他。輸入描述 每個輸入包含乙個測試用例。每個測試用例的第一行包含乙個正整數,表示轉方向的次數n n 1000 接下來的一行包含乙個長度為n的字串,由l和r組成,l表示向...

牛客網 2019校招 瞌睡

小易覺得高數課太無聊了,決定睡覺。不過他對課上的一些內容挺感興趣,所以希望你在老師講到有趣的部分的時候叫醒他一下。你知道了小易對一堂課每分鐘知識點的感興趣程度,並以分數量化,以及他在這堂課上每分鐘是否會睡著,你可以叫醒他一次,這會使得他在接下來的k分鐘內保持清醒。你需要選擇一種方案最大化小易這堂課聽...

牛客網 2019校招真題程式設計題 被3整除

小q得到乙個神奇的數列 1,12,123,12345678910,1234567891011 並且小q對於能否被3整除這個性質很感興趣。小q現在希望你能幫他計算一下從數列的第l個到第r個 包含端點 有多少個數可以被3整除。輸入包括兩個整數l和r 1 l r 1e9 表示要求解的區間兩端。輸出乙個整數...