洛谷传送门:CF1714A Everyone Loves to Sleep - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
难度:普及-(个人认为难度入门)
知识点:模拟
思路:
为了写的快,减少判断语句,省去结构体,所以把小时换成分钟
读入所有闹钟,排个序,用lower_bound找到第一个比睡觉时间大的闹钟,作差即可
如果一天中睡觉后没有闹钟,那就取第一个闹钟加一天再做差即可
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int q,n,h,m,h0,m0,index,ans; scanf("%d", &q);
while(q--){
scanf("%d %d %d", &n, &h, &m);
vector<int> arr(n,0);
for(int i = 0; i<n; i++){
scanf("%d %d", &h0, &m0);
arr[i] = h0*60 + m0;
}
sort(arr.begin(), arr.end());
index = lower_bound(arr.begin(), arr.end(), h*60 + m) - arr.begin();
if(index==n){
ans = arr[0] + 24*60 - (h*60 + m);//不会越界,至少有一个闹钟
}
else{
ans = arr[index] - (h*60 + m);
}
printf("%d %d\n", ans/60, ans%60);
}
return 0;
}
/*
知识点:模拟
思路:
为了写的快,省去结构体,减少判断语句,所以把小时换成分钟
读入所有闹钟,排个序,用lower_bound找到第一个比睡觉时间大的闹钟,作差即可
如果一天中睡觉后没有闹钟,那就取第一个闹钟加一天再做差即可
心路历程:水题,练速度
共耗时23min
读题5min
想题2min
写题16min
*/