思路
- 设 x 为时差, A 为第一次起降时间差, B 为第二次起降时间差,可得
A + x = B - x
,推出: (A + B) / 2 = A + x
。
- 为了便于计算,可以先将所有的时间统一单位为秒,计算出两个时间相差秒数后,再转为时分秒的格式。
输入问题
scanf
会自动忽略输入字符串的空白字符(空格、tab、回车等),直到下一个非空白字符。
- 若遇到的非空白字符与格式化字符串匹配,则读入(例如:
scanf("%d(+%d)", &a, &b);
,若输入1(+2)则可以读入)。
- 若遇到的非空白字符与格式化字符串不匹配,则结束此次读取 ,并将该非空白字符回存到缓存中,在下一次读取函数被调用时读取(如
scanf
、 getchar
等)。
模拟24ms
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <cstdio>
#include <cmath>
#include <unordered_map>
#include <map>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
const int N = 1e5 + 5;
int readtime()
{
int a1, b1, c1, a2, b2, c2, d = 0;
scanf("%d:%d:%d %d:%d:%d (+%d)", &a1, &b1, &c1, &a2, &b2, &c2, &d);
int sum = (a2 + d * 24) * 3600 + b2 * 60 + c2 - (a1 * 3600 + b1 * 60 + c1);
return sum;
}
void myprint(int a, int b)
{
int c = a + b >> 1;
int x = c /60 / 60, y = c / 60 % 60, z = c % 60;
printf("%02d:%02d:%02d\n", x, y, z);
return ;
}
int main()
{
int T;
cin >> T;
while (T -- )
{
int a = readtime();
int b = readtime();
myprint(a, b);
}
return 0;
}