【问题描述】
阿迪在一个大型机场担任飞机跑道交通管制员,他控制一个通常用于着陆的跑道。因此,他有一个未来一段时间飞机着陆的时间安排,每次着陆持续时间为1分钟。
他被要求在安排表中插入一次起飞,起飞本身需要1分钟,但出于安全考虑,起飞和着陆之间应有至少s分钟的时间间隔。
请找出阿迪能插入的起飞的最早时间。
【输入形式】
输入的第一行包含两个整数n和s(1≤n≤100 ,1≤s≤60),分别表示在时间安排表中的着陆的航班数量以及在着陆与起飞之间的最小允许时间(以分钟计)。
接下来的n行,每行包含两个整数h和m (0≤h≤23, 0≤m≤59),表示飞机着陆的时间,以小时和分钟计,从当前时刻开始(也就是说当前时刻是0时0分),这些时间以递增的顺序给出。
【输出形式】
输出两个整数h和m,代表可以插入的起飞的最早时间的小时和分钟。
【样例输入】
6 60
0 0
1 20
3 21
5 0
19 30
23 40
【样例输出】
6 1
查找两个时间差距大于2s+2的就行。
#include <iostream>
using namespace std;
int main()
{
int n, s;
int h, m, i;
int* t;
cin >> n >> s;
t = new int(n + 1);
for (i = 0; i < n; i++)
{
cin >> h >> m;
t[i] = 60 * h + m;
}
t[n] = t[0] + 24 * 60;
for (i = 0; i < n; i++)
{
if (t[i + 1] - t[i] >= 2 * s + 2)
{
m = (t[i] + s + 1) % (24 * 60);
h = m / 60;
m %= 60;
printf("%d %d\n", h, m);
break;
}
if (i == n - 1) printf("无合适起飞窗口\n");
}
return 0;
}
第一个为什么要和最后一个比呢?
如果第一个之间可以插入的话,就从0:00开始,如果a[i-1]+最小时间 <= a[i] 那么 a[i-1]+最小时间就是可插入的最小时间(a[0]需和0:00比),如果不能,那就不需要和0:00比
有用记得采纳呐