P8665 [蓝桥杯 2018 省 A] 航班时间-洛谷
例题:
- 前置知识
-
- 去程时间 =飞行时间 + 时差;回程时间 = 飞行时间 − 时差
- 由此可知 飞行时间 = (去+回)/ 2
- 用 scanf 输入前面的时间:
scanf("%d:%d:%d %d:%d:%d",&h1,&m1,&s1,&h2,&m2,&s2);
- 每一行后面不一定有额外的天数。如果有,则中间一定有空格,所以判断下一个字符是否为空格即可。
- 为方便计算,不妨把时间都转换成以秒为单位 t=86400⋅d+3600⋅h+60⋅m+s
- 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;
}