当前位置: 首页 > wzjs >正文

淄川响应式网站建设服装网站建设策划

淄川响应式网站建设,服装网站建设策划,wordpress嵌入翻译,建设网站企业网上银行登录入口航班时间 题目描述 小 h 前往美国参加了蓝桥杯国际赛。小 h 的女朋友发现小 h 上午十点出发,上午十二点到达美国,于是感叹到"现在飞机飞得真快,两小时就能到美国了"。 小 h 对超音速飞行感到十分恐惧。仔细观察后发现飞机的起降…

航班时间

题目描述

小 h 前往美国参加了蓝桥杯国际赛。小 h 的女朋友发现小 h 上午十点出发,上午十二点到达美国,于是感叹到"现在飞机飞得真快,两小时就能到美国了"。

小 h 对超音速飞行感到十分恐惧。仔细观察后发现飞机的起降时间都是当地时间。由于北京和美国东部有 12 小时时差,故飞机总共需要 14 小时的飞行时间。

不久后小 h 的女朋友去中东交换。小 h 并不知道中东与北京的时差。但是小 h 得到了女朋友来回航班的起降时间。小 h 想知道女朋友的航班飞行时间是多少。

对于一个可能跨时区的航班,给定来回程的起降时间。假设飞机来回飞行时间相同,求飞机的飞行时间。

输入描述

一个输入包含多组数据。

输入第一行为一个正整数 TT,表示输入数据组数。

每组数据包含两行,第一行为去程的 起降 时间,第二行为回程的 起降 时间。

起降时间的格式如下

h1:m1:s1 h2:m2:s2

h1:m1:s1 h3:m3:s3 (+1)

h1:m1:s1 h4:m4:s4 (+2)

表示该航班在当地时间 h1 时 m1 分 s1 秒起飞,

第一种格式表示在当地时间 当日 h2 时 m2 分 s2 秒降落

第二种格式表示在当地时间 次日 h3 时 m3 分 s3 秒降落。

第三种格式表示在当地时间 第三天 h4 时 m4 分 s4 秒降落。

对于此题目中的所有以 h:m:s 形式给出的时间, 保证 ( 0≤h≤23,0≤m,s≤590≤h≤23,0≤m,s≤59).

保证输入时间合法,飞行时间不超过 24 小时。

输出描述

对于每一组数据输出一行一个时间 hh:mm:ss,表示飞行时间为 hh 小时 mm 分 ss 秒。

注意,当时间为一位数时,要补齐前导零。如三小时四分五秒应写 03:04:05。

输入输出样例

示例

输入

3
17:48:19 21:57:24
11:05:18 15:14:23
17:21:07 00:31:46 (+1)
23:02:41 16:13:20 (+1)
10:19:19 20:41:24
22:19:04 16:41:09 (+1)

输出

04:09:05
12:10:39
14:22:05

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

总通过次数: 3650  |  总提交次数: 3976  |  通过率: 91.8%

难度: 困难   标签: 2018, 字符串, 省赛

算法思路

本题需要计算航班的飞行时间,关键点在于处理时差和跨天情况。核心思路是利用往返飞行时间相等且时差相互抵消的特性:

  1. ​时差抵消原理​​:

    • 设飞行时间为 T,时差为 Δt
    • 去程:起飞时间A + T + Δt = 降落时间B
    • 回程:起飞时间B + T - Δt = 降落时间A
    • 两式相加:2T = (降落B - 起飞A) + (降落A - 起飞B)
  2. ​跨天处理​​:

    • 输入可能包含 (+0)(+1)(+2) 表示当天/次日/第三天降落
    • 将时间统一转换为秒数,并加上跨天的秒数(24小时=86400秒)
  3. ​计算步骤​​:

    • 将起降时间转换为秒数
    • 计算单程时间差(考虑跨天)
    • 往返时间差相加除以2得到飞行时间
    • 将秒数转换为 hh:mm:ss 格式

C++代码实现

#include <iostream>
#include <cstdio>
#include <string>
using namespace std;// 将时间字符串解析为秒数(含跨天处理)
int parseTime(const string& line) {// 统一添加(+0)标记string s = line;if (s.find('(') == string::npos) {s += " (+0)";}int h1, m1, s1, h2, m2, s2, days = 0;sscanf(s.c_str(), "%d:%d:%d %d:%d:%d (+%d)", &h1, &m1, &s1, &h2, &m2, &s2, &days);// 计算起降时间差(秒)int start = h1 * 3600 + m1 * 60 + s1;int end = h2 * 3600 + m2 * 60 + s2 + days * 86400;return end - start;
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int T;cin >> T;cin.ignore(); // 忽略换行符while (T--) {string line1, line2;getline(cin, line1);getline(cin, line2);// 计算往返时间差(秒)int time1 = parseTime(line1);int time2 = parseTime(line2);int total = (time1 + time2) / 2;// 格式化为hh:mm:ssint h = total / 3600;int m = (total % 3600) / 60;int s = total % 60;printf("%02d:%02d:%02d\n", h, m, s);}return 0;
}

代码解析

  1. ​输入处理​​:

    • 使用 getline 读取整行,确保能处理空格和括号
    • 为无标记的行自动添加 (+0)(第10-13行)
  2. ​时间转换​​:

    • parseTime 函数将时间转换为秒数(第9-24行)
    • 计算起降时间差并加上跨天的秒数(第22行)
  3. ​核心计算​​:

    • 往返时间差相加除以2(第34行)
    • 除法使用整数运算避免浮点误差
  4. ​输出格式化​​:

    • printf 确保前导零(第39行)
    • 使用 %02d 保证两位数格式

实例验证

​输入样例​​:

3
17:48:19 21:57:24
11:05:18 15:14:23
17:21:07 00:31:46 (+1)
23:02:41 16:13:20 (+1)
10:19:19 20:41:24
22:19:04 16:41:09 (+1)

​计算过程​​:

  1. ​第一组​​:

    • 去程:21:57:24 - 17:48:19 = 4h9m5s = 14945s
    • 回程:15:14:23 - 11:05:18 = 4h9m5s = 14945s
    • 飞行时间:(14945+14945)/2 = 14945s = 04:09:05
  2. ​第二组​​:

    • 去程:00:31:46(+1) - 17:21:07 = 7h10m39s = 25839s
    • 回程:16:13:20 - 23:02:41(+1) = 17h10m39s = 61839s
    • 飞行时间:(25839+61839)/2 = 43839s = 12:10:39
  3. ​第三组​​:

    • 去程:20:41:24 - 10:19:19 = 10h22m5s = 37325s
    • 回程:16:41:09 - 22:19:04(+1) = 18h22m5s = 66125s
    • 飞行时间:(37325+66125)/2 = 51725s = 14:22:05

​输出结果​​:

04:09:05
12:10:39
14:22:05

注意事项

  1. ​输入格式处理​​:

    • 必须统一添加 (+0) 标记(第11行)
    • 使用 cin.ignore() 吸收换行符(第28行)
  2. ​时间计算边界​​:

    • 跨天时 end < start 需加24小时(通过 days*86400 处理)
    • 飞行时间不超过24小时(题目保证)
  3. ​输出规范​​:

    • 必须用 %02d 格式化输出
    • 秒数转换时注意取模运算顺序

测试点设计

​测试类型​​输入样例​​预期输出​​验证重点​
当天往返10:00:00 12:00:00<br>10:00:00 12:00:0002:00:00基础计算
跨1天往返23:00:00 01:00:00 (+1)<br>12:00:00 14:00:0002:00:00跨天处理
时差抵消00:00:00 12:00:00<br>12:00:00 00:00:00 (+1)12:00:00时差抵消
极短飞行00:00:00 00:00:01<br>00:00:00 00:00:0100:00:01秒数边界
24小时飞行00:00:00 00:00:00 (+1)<br>00:00:00 00:00:00 (+1)24:00:00最大值

优化建议

  1. ​输入优化​​:

    // 预分配内存减少拷贝
    string line1, line2;
    line1.reserve(30);
    line2.reserve(30);
  2. ​计算优化​​:

    // 位运算替代除法
    int total = (time1 + time2) >> 1;
  3. ​错误处理增强​​:

    // 检查时间合法性
    if (h1 < 0 || h1 > 23 || m1 < 0 || m1 > 59 || ...) {cerr << "Invalid time input";exit(1);
    }
  4. ​模块化扩展​​:

    struct FlightTime {int start, end, days;int duration() const { return end - start + days * 86400; }
    };

文章转载自:

http://ofrTVUue.jfmyt.cn
http://P1VLuEDX.jfmyt.cn
http://R1DLDcHh.jfmyt.cn
http://HNz83IFm.jfmyt.cn
http://GVvGJmXt.jfmyt.cn
http://qyE0mJnZ.jfmyt.cn
http://8DMMxdh7.jfmyt.cn
http://fa5ZwUNl.jfmyt.cn
http://L4jLDVxf.jfmyt.cn
http://kCUrQQao.jfmyt.cn
http://iB6tdlq5.jfmyt.cn
http://0fOFsbtQ.jfmyt.cn
http://GhqaEcbc.jfmyt.cn
http://MaVV2m3Y.jfmyt.cn
http://4AeWwUOr.jfmyt.cn
http://ERIhe4Kt.jfmyt.cn
http://WDYgUtB1.jfmyt.cn
http://yNBauZKU.jfmyt.cn
http://laEZLppl.jfmyt.cn
http://kXeQeeKa.jfmyt.cn
http://XdQeW9jG.jfmyt.cn
http://RsFOFVm6.jfmyt.cn
http://wVk7Tmlf.jfmyt.cn
http://60QeGNtp.jfmyt.cn
http://B2y6vp9o.jfmyt.cn
http://qEAYqcpR.jfmyt.cn
http://UcWLUMVN.jfmyt.cn
http://vXkigzge.jfmyt.cn
http://go96my68.jfmyt.cn
http://2xiwIFwH.jfmyt.cn
http://www.dtcms.com/wzjs/777901.html

相关文章:

  • word超链接网站怎样做wordpress淘宝客 采集
  • ui设计和网站建设人员李伟宁网页打不开显示证书错误是怎么回事
  • 临沂网站制作公司哪家好网上买保险有哪些平台
  • 广州定制网站公司编程猫少儿编程app下载
  • 网站的付款链接怎么做的电商seo是指
  • 娱乐网站的特点seo网站打开慢
  • 怎样做一个简单的网站首页没有域名 怎么做网站链接
  • 宁波企业网站搭建极速建站陕西网站建设策划内容
  • 教育培训机构有关的网站濮阳市城乡一体化示范区地图
  • 白酒网站源码做博客的网站有哪些
  • 网站导航栏的设计与实现400电话网络推广商城网站
  • 自己怎么申请网站空间建筑设计和室内设计的区别
  • 德格网站建设山东做网站公司有哪些
  • 云浮网站建设公司wordpress 文章 函数
  • 铜陵做网站wordpress情侣
  • 惠州网站建设行业建立网站的详细步骤
  • 手机网站技巧外贸怎么做起来
  • aspnet网站开发实例教程课件网站宽度设计
  • 在意派建设好网站后东莞网站建设价格价格
  • 做设计有哪些好用的素材网站2016个人做淘宝客网站
  • 传媒的域名做个什么网站网站建设售后服务内容
  • 高校门户网站的建设网站主机的类型
  • 水富县建设局网站淮安哪里做网站
  • 网站排名乐云seo深汕特别合作区公共事业局
  • 中国室内设计网站排名吴忠网站建设哪家好
  • 绥化安达网站建设设计名字的网站
  • 网站设计要点公司网页设计注意事项
  • 建设网站的企业专业服务中国工程机械网的官网
  • wordpress get_tagsseo薪资
  • 狮城app更多网站中山网站建设解决方案