飞行时间

【问题背景】
小 h 前往美国参加比赛。小 h 的女朋友发现小 h 上午十点出发,上午十二点到达
美国,于是感叹到“现在飞机飞得真快,两小时就能到美国了”。
小 h 对超音速飞行感到十分恐惧。仔细观察后发现飞机的起降时间都是当地时间。
由于北京和美国东部有 12 小时时差,故飞机总共需要 14 小时的飞行时间。
不久后小 h 的女朋友去中东交换。小 h 并不知道中东与北京的时差。但是小 h 得
到了女朋友来回航班的起降时间。小 h 想知道女朋友的航班飞行时间是多少。
【问题描述】
对于一个可能跨时区的航班,给定来回程的起降时间。假设飞机来回飞行时间相
同,求飞机的飞行时间。
【输入格式】
从文件 timezone.in 中读入数据。
一个输入文件包含多组数据。
输入第一行为一个正整数 T,表示输入数据组数。
每组数据包含两行,第一行为去程的起降 时间,第二行为回程的起降 时间。
起降时间的格式如下
h1:m1:s1 h2:m2:s2h1: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 ≤ 59;对
于不足两位数的情况,保证添加了前导零补齐两位。
第 2 页 共 8 页
NOIP 模拟题 第 13 套 飞行时间(timezone)
【输出格式】
输出到文件 timezone.out 中。
对于每一组数据输出一行一个时间 hh:mm:ss,表示飞行时间为 hh 小时 mm 分
ss 秒。
注意,当时间为一位数时,要补齐前导零。如三点四分五秒应写为 03:04:05。


送分的SB题挂了

原因是我没有写gets

输入卡了,导致输出少了一个

这个故事告诉我们,gets可以将一整行读入,直到回车

tips:空格也算一个字符

下面给出代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdio>
#include<cstdlib>
using namespace std;
inline int rd(){
    int x=0,f=1;
    char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
    for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
    return x*f;
}
inline void write(int x){
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+'0');
    return ;
}
int n;
char s1[106],s2[106],e1[106],e2[106];
char add1[106],add2[106];
int h1,h2,m1,m2,se1,se2;
int ans=0;
int ansh,ansm,anss;
void change(){
    int l1=strlen(e1+1),l2=strlen(e2+1);
    h1=((e1[1]-'0')*10+(e1[2]-'0'))-((s1[1]-'0')*10+(s1[2]-'0'));
    h2=((e2[1]-'0')*10+(e2[2]-'0'))-((s2[1]-'0')*10+(s2[2]-'0'));
    m1=((e1[4]-'0')*10+(e1[5]-'0'))-((s1[4]-'0')*10+(s1[5]-'0'));
    m2=((e2[4]-'0')*10+(e2[5]-'0'))-((s2[4]-'0')*10+(s2[5]-'0'));
    se1=((e1[7]-'0')*10+(e1[8]-'0'))-((s1[7]-'0')*10+(s1[8]-'0'));
    se2=((e2[7]-'0')*10+(e2[8]-'0'))-((s2[7]-'0')*10+(s2[8]-'0'));
    if(strlen(add1+1)==4) h1+=(add1[3]-'0')*24;
    if(strlen(add2+1)==4) h2+=(add2[3]-'0')*24;
    return ;
}
void solve(){
    ans=h1*3600+m1*60+se1+h2*3600+m2*60+se2;
    ans/=2;
    ansh=ans/3600;
    ans%=3600;
    ansm=ans/60;
    ans%=60;
    anss=ans;
    return ;
}
char a[10006],b[10006];
void init(){
    gets(a+1),gets(b+1);
    memset(add1,0,sizeof(add1));
    memset(add2,0,sizeof(add2));
    for(int i=1;i<=8;i++) s1[i]=a[i];
    for(int i=10;i<=17;i++) e1[i-9]=a[i];
    for(int i=19;i<=strlen(a+1);i++) add1[i-18]=a[i];
    for(int i=1;i<=8;i++) s2[i]=b[i];
    for(int i=10;i<=17;i++) e2[i-9]=b[i];
    for(int i=19;i<=strlen(b+1);i++) add2[i-18]=b[i];
    ans=0;
    return ;       
}
void output(){
    if(ansh<10) printf("0%d",ansh);
    else printf("%d",ansh);
    if(ansm<10) printf(":0%d",ansm);
    else printf(":%d",ansm);
    if(anss<10) printf(":0%d",anss);
    else printf(":%d",anss);
    puts("");
    return ;
}
int main(){
    n=rd();
    while(n--){
        init();
        change();
        solve();
        output();
    }
    return 0;
}

 

posted @ 2018-10-20 14:57  Bruce--Wang  阅读(551)  评论(0编辑  收藏  举报