比赛时间

139 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

题目描述

奶牛贝茜已经厌倦了牛奶生产行业,并希望转而从事令人兴奋的计算机行业。

为了提高自己的编程能力,她决定参加在线 USACO 比赛。

由于她注意到比赛开始于 20112011 年 1111 月 1111 日(11/11/11),于是她决定下载问题并在 11/11/11 上午 11:11:11 开始答题。

不幸的是,贝茜的时间管理能力很差,因此她想编写一个快速程序来帮助她确保比赛时间不超过 33 小时(180分钟)。

给定她停止答题的日期和时间,请帮助贝茜计算她在比赛中花费的总分钟数。

输入格式

共一行,包含三个整数 D,H,M。表示贝茜停止答题的日期,小时,分钟。

用 24 小时制记录时间。

输出格式

输出贝茜在比赛中花费的总分钟数。

如果结束时间比开始时间还早,则输出 −1。

数据范围

11≤D≤14, 0≤H≤23, 0≤M≤59

输入样例:

12 13 14

输出样例:

1563

思路

解法一:数学

本题主要考察算数思维,经过抽象,我们不难发现这道题的本质上是计算开始时间到结束时间共有多少分钟。可以先把开始时间的日期算成分钟结尾的数字,即天数 * 60 * 24 + 小时 * 60 + 分钟;然后我们读入题目给出的结束时候的时间,根据公式转换成相应的时间戳。如果结束的时间戳更小,则输出-1,否则就输出二者相减的时间,即是我们的答案。

时间复杂度:O(n)

解法二:模拟

天数小时分钟各一个变量模拟时间推移

代码

#include <iostream>

using namespace std;

int main()
{
    int time = 11 * 60 * 24 + 11 * 60 + 11;// 计算总分钟数
    int d, h, m;
    cin >> d >> h >> m;
    
    int end_time = d * 60 * 24 + h * 60 + m;
    if(end_time >= time) cout << end_time - time << endl;
    else cout << "-1" << endl;
    
    return 0;
}