牛牛總是睡過頭,所以他定了很多鬧鐘,只有在鬧鐘響的時候他才會醒過來並且決定起不起床。從他起床算起他需要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 表示要求解的區間兩端。輸出乙個整數...