1 条题解
-
0
自动搬运
来自洛谷,原作者为

lailai0916
Student & Developer搬运于
2025-08-24 22:41:14,当前版本为作者最后更新于2023-05-10 22:37:23,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
原题链接
参考资料
解题思路
时差建模
- 显然:
- 设飞行时间为 ,去程时间为 ,回程时间为 ,时差为 ,则有:
- 两式相加得:
- 即飞行时间 为去程时间 与回程时间 的平均值。
输入处理
- 利用
scanf读入前半部分的时间:
scanf("%d:%d:%d %d:%d:%d",&h1,&m1,&s1,&h2,&m2,&s2);- 若有后半部分的额外天数,两部分之间会存在空格,所以可以用
getchar判断下一个字符是否为空格:
if(getchar()==' ')scanf("(+%d)",&d);- 为便于计算,统一将时间转化为总秒数:
计算时间
分别利用 起飞时间 减去 降落时间,求出 去程时间 和 回程时间,计算两者的平均值。
输出格式
- 将总秒数还原为时分秒:
设时分秒分别为 ,显然 :
- 因为 和 都是 的倍数,所以 。
- 因为 是 的倍数,,所以 ,。
- 因为 ,,所以 ,。
- 利用
printf格式化输出时间:
printf("%02d:%02d:%02d\n",ans/3600,ans%3600/60,ans%60);参考代码
#include <bits/stdc++.h> using namespace std; int get() { int h1,m1,s1,h2,m2,s2,d=0; scanf("%d:%d:%d %d:%d:%d",&h1,&m1,&s1,&h2,&m2,&s2); if(getchar()==' ')scanf("(+%d)",&d); return (d*86400+h2*3600+m2*60+s2)-(h1*3600+m1*60+s1); } int main() { int T; scanf("%d",&T); while(T--) { int ans=get()+get()>>1; printf("%02d:%02d:%02d\n",ans/3600,ans%3600/60,ans%60); } return 0; }
- 1
信息
- ID
- 8123
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者