您当前的位置: 首页 >  蓝桥杯

不牌不改

暂无认证

  • 0浏览

    0关注

    422博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

不牌不改 发布时间:2022-03-29 13:02:05 ,浏览量:0

题目

题目链接

题解

模拟。

规定几个符号, S A → B S_{A\rightarrow B} SA→B​、 E A → B E_{A\rightarrow B} EA→B​、 S A ← B S_{A\leftarrow B} SA←B​、 E A ← B E_{A\leftarrow B} EA←B​分别表示去程( A → B A\rightarrow B A→B)起、落时间和回程( A ← B A\leftarrow B A←B)起、落时间,设 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} \\ SA→B​+d+f=EA→B​EA←B​+d−f=SA←B​

故, 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=(EA→B​+EA←B​−SA→B​−SA←B​)/2 一定要注意, S A → B S_{A\rightarrow B} SA→B​ 和 E A ← B E_{A\leftarrow B} EA←B​ 是 A A A 的时间,而 E A → B E_{A\rightarrow B} EA→B​ 和 S A ← B S_{A\leftarrow B} SA←B​ 是 B B B 的时间。

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

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

代码
#include
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;
}
关注
打赏
1662186765
查看更多评论
立即登录/注册

微信扫码登录

0.0562s