P8665 [蓝桥杯 2018 省 A] 航班时间-洛谷

​​​​​​例题:

P8665 [蓝桥杯 2018 省 A] 航班时间-洛谷

  • 前置知识
    • 去程时间 =飞行时间 + 时差;回程时间 = 飞行时间 − 时差
    • 由此可知 飞行时间 = (去+回)/ 2
  1. 用 scanf 输入前面的时间:
scanf("%d:%d:%d %d:%d:%d",&h1,&m1,&s1,&h2,&m2,&s2);
  1. 每一行后面不一定有额外的天数。如果有,则中间一定有空格,所以判断下一个字符是否为空格即可。
  2. 为方便计算,不妨把时间都转换成以秒为单位 t=86400⋅d+3600⋅h+60⋅m+s
  3. h = ans/3600 min = ans%3600/60 s = ans%60

注意 不能define int longlong 超数据了

#include <bits/stdc++.h>
#define endl '\n'
#define INF 0x3f3f3f3f3f
const int N = 1000010;
using namespace std;

int get()
{
	int h1,m1,s1,h2,m2,s2,day=0;
	scanf("%d:%d:%d %d:%d:%d",&h1,&m1,&s1,&h2,&m2,&s2);
	if(getchar()==' ')scanf("(+%d)",&day);
	return (day*86400+h2*3600+m2*60+s2)-(h1*3600+m1*60+s1);
}
signed main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		int ans=(get()+get())/2;
		printf("%02d:%02d:%02d\n",ans/3600,ans%3600/60,ans%60);
	}
	return 0;
}