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

航班时间 | 第九届蓝桥杯省赛C++A组

小 h 前往美国参加了蓝桥杯国际赛。

小 h 的女朋友发现小 h 上午十点出发,上午十二点到达美国,于是感叹到“现在飞机飞得真快,两小时就能到美国了”。

小 hh 对超音速飞行感到十分恐惧。

仔细观察后发现飞机的起降时间都是当地时间。

由于北京和美国东部有 12 小时时差,故飞机总共需要 14 小时的飞行时间。

不久后小 h 的女朋友去中东交换。

小 h 并不知道中东与北京的时差。

但是小 h 得到了女朋友来回航班的起降时间。

小 h 想知道女朋友的航班飞行时间是多少。

对于一个可能跨时区的航班,给定来回程的起降时间。

假设飞机来回飞行时间相同,求飞机的飞行时间。

输入格式

一个输入包含多组数据。

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

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

起降时间的格式如下:

  1. h1:m1:s1 h2:m2:s2
  2. h1:m1:s1 h3:m3:s3 (+1)
  3. h1:m1:s1 h4:m4:s4 (+2)

第一种格式表示该航班在当地时间h1时m1分s1秒起飞,在当地时间当日h2时m2分s2秒降落。

第二种格式表示该航班在当地时间h1时m1分s1秒起飞,在当地时间次日h2时m2分s2秒降落。

第三种格式表示该航班在当地时间h1时m1分s1秒起飞,在当地时间第三日h2时m2分s2秒降落。

输出格式

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

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

数据范围

保证输入时间合法(0≤h≤23,0≤m,s≤59),飞行时间不超过24小时。

输入样例:
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
题解:

        发现你一去,时差增加,一回时差减少,于是两次航班的带时差的飞行时间的和即为正常飞行时间。

        计算时差也很容易,使用getline读行,遇到空格或者冒号的时候更新num(注意预处理在字符串最后加个空格),当遇到左括号时取出增加的天数。

        使用最小单位秒作为差,计算即可。

        注意:1.得到的差的时间的时分秒可能出现奇数,要将奇数项--,后一项+=60。

代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<queue>
#include<stack>
#include<vector>
#include<unordered_set>
#include<unordered_map>
#include<map>
#include<set>
using namespace std;
typedef long long int ll;

int t=0;
struct node{
    int h,m,s;
};

int solve(string a){
    a+=' ';
    vector<int> bar;
    int num=0;
    int day=0;
    for(int i=0;i<a.size();i++){
        if(a[i]==':' || a[i]==' '){
            bar.push_back(num);
            num=0;
        }
        else if(a[i]=='('){
            day=(int)(a[i+2]-48);
        }
        else{
            num*=10;num+=(int)(a[i]-48);
        }
    }
    int time1=0,time2=0;
    time1+=bar[0]*60*60;
    time1+=bar[1]*60;
    time1+=bar[2];
    time2+=bar[3]*60*60;
    time2+=bar[4]*60;
    time2+=bar[5];
    time2+=day*24*60*60;
    int dif=time2-time1;
    return dif;
}

int main(){
    cin >> t;
    getchar();
    string a;
    while(t>0){
        getline(cin,a);
        int ts1=solve(a);
        getline(cin,a);
        int ts2=solve(a);
        int dif=ts1+=ts2;
        int hour=dif/3600;
        dif%=3600;
        int minitues=dif/60;
        dif%=60;
        int seconds=dif;
        if(hour%2==1){
            hour--;
            minitues+=60;
        }
        if(minitues%2==1){
            minitues--;
            seconds+=60;
        }
        hour/=2;
        minitues/=2;
        seconds/=2;
        if(hour/10==0){
            cout << "0" << hour;
        }
        else{
            cout << hour;
        }
        cout << ":";
        if(minitues/10==0){
            cout << "0" << minitues;
        }
        else{
            cout << minitues;
        }
        cout << ":";
        if(seconds/10==0){
            cout << "0" << seconds;
        }
        else{
            cout << seconds;
        }
        cout << "\n";
        t--;
    }
}

相关文章:

  • HTML5CSS3新特性
  • OpenGL ES 2.0与OpenGL ES 3.1的区别
  • 蚁群算法初探(ACO)
  • STM32内部时钟输出比较OC(学习笔记)
  • Git+Fork 入门介绍
  • 辛格迪客户案例 | 北方药谷德生实施称量管理系统
  • JVM详解(包括JVM内存模型与GC垃圾回收)
  • [CSDN] 解析CSDN积分策略:每周连续上传与综合贡献分
  • AI与SEO关键词智能匹配方案
  • TailwindCSS安装教程(PostCSS)
  • 如何保证LabVIEW软件开发的质量?
  • [Vue2]Vue指令
  • 基于STC89C51单片机的储缆卷筒控制器及其结构设计
  • C++学习之云盘项目总结
  • Rust Web开发新选择:探索轻量级框架Hyperlane的高效实践
  • 消息队列(Kafka及RocketMQ等对比联系)
  • 订票系统|基于Java+vue的火车票订票系统(源码+数据库+文档)
  • 支持selenium的chrome driver更新到134.0.6998.90
  • 存储过程、存储函数与触发器详解(MySQL 案例)
  • 爱普生SG-3031CMA有源晶振在汽车雷达中的应用
  • dw做网站一般设为什么样/百度热搜榜怎么打开
  • 潍坊自动seo/seo网络推广报价
  • 上海市网站建设/网站统计平台
  • 2019年云南建设银行招聘网站/网络营销的作用
  • 班级品牌建设/关键词排名的排名优化
  • 做网站电话/网站域名综合查询