2018年蓝桥杯省赛-航班时间

题目

题目链接

题解

模拟。


规定几个符号, S A → B S_{A\rightarrow B} SAB E A → B E_{A\rightarrow B} EAB S A ← B S_{A\leftarrow B} SAB E A ← B E_{A\leftarrow B} EAB分别表示去程( A → B A\rightarrow B AB)起、落时间和回程( A ← B A\leftarrow B AB)起、落时间,设 d d d 为两地时差(不妨假设 B B B 的时间比 A A A的时间快,举个例子来说就是 B B B 是中国, A A A 是美国, d d d 可正可负), f f f 为飞行时间(恒正);

那么存在关系,在同一时刻, T A + d = T B T_A + d= T_B TA+d=TB,根据等式可以列出方程组:

S A → B + d + f = E A → B E A ← B + d − f = S A ← B S_{A\rightarrow B} + d + f = E_{A\rightarrow B} \\ E_{A\leftarrow B}+ d - f = S_{A\leftarrow B} \\ SAB+d+f=EABEAB+df=SAB

故,
f = ( E A → B + E A ← B − S A → B − S A ← B ) / 2 f = (E_{A\rightarrow B} + E_{A\leftarrow B} - S_{A\rightarrow B} - S_{A\leftarrow B})/2 f=(EAB+EABSABSAB)/2
一定要注意, S A → B S_{A\rightarrow B} SAB E A ← B E_{A\leftarrow B} EAB A A A 的时间,而 E A → B E_{A\rightarrow B} EAB S A ← B S_{A\leftarrow B} SAB B B B 的时间。


整体思路,先将时间换算成秒,统一用秒做加减法,将结果再转换为时间即可。

注意处理(+1)和(+2),这表示换算成秒数后还要再加上1天或2天的秒数。

代码

#include<bits/stdc++.h>
using namespace std;

int h, m, s;

int getstarttime () {
	scanf ("%d:%d:%d", &h, &m, &s);
	return (h * 60 + m) * 60 + s;
}

int getendtime () {
	int res = 0;
	scanf ("%d:%d:%d", &h, &m, &s);
	char ch = getchar ();
	if (ch == ' ') {
		getchar (), getchar(), ch = getchar (), getchar();
		res += (ch - '0') * 24 * 3600;
	}
	return res + (h * 60 + m) * 60 + s;
}

void converttotime (int x) {
	printf ("%02d:%02d:%02d\n", x / 3600, x / 60 % 60, x % 60);
}

int main()
{
	int T;
	cin >> T;
	while (T --) {
		int s1 = getstarttime ();
		int e1 = getendtime ();
		int s2 = getstarttime ();
		int e2 = getendtime ();
		int flytime = e2 + e1 - s1 - s2;
		flytime /= 2;
		converttotime (flytime);
	}	

	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不牌不改

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值