[Usaco2011 November]Contest Timing比赛时间 Bronze

Problem 1: Contest Timing 比赛时间 [Brian Dean]

Bessie正在参加在线编程比赛,比赛开始时间是2011年上午11点11分(D/H/M)(11/11/11),给定她结束比赛(最终提交)的时间,计算她本场比赛共花费多少分钟
Bessie the cow is getting bored of the milk production industry, and wants
to switch to an exciting new career in computing. To improve her coding
skills, she decides to compete in the on-line USACO competitions. Since
she notes that the contest starts on November 11, 2011 (11/11/11), she
decides for fun to download the problems and begin coding at exactly 11:11
AM on 11/11/11.

Unfortunately, Bessie’s time management ability is quite poor, so she wants
to write a quick program to help her make sure she does not take longer
than the 3 hour (180 minute) time limit for the contest. Given the date
and time she stops working, please help Bessie compute the total number of
minutes she will have spent on the contest.

PROBLEM NAME: ctiming

输入格式
INPUT FORMAT:
一行,三个数D H M,表示Bessie结束比赛时间。11<=D<=14 H M 是24小时表示法中的时和分,23:59 之后 是0:0
* Line 1: This line contains 3 space-separated integers, D H M,
specifying the date and time at which Bessie ends the contest.
D will be an integer in the range 11..14 telling the day of
the month; H and M are hours and minutes on a 24-hour clock
(so they range from H=0,M=0 at midnight up through H=23,M=59
at 11:59 PM).

样例输入
SAMPLE INPUT (file ctiming.in):

12 13 14

INPUT DETAILS:
Bessie ends the contest on November 12, at 13:14 (that is, at 1:14 PM).

输出格式
OUTPUT FORMAT:
一行,Bessie这场比赛所花费分钟数,如果结束时间早于开始时间则输出-1
* Line 1: The total number of minutes spent by Bessie in the contest,
or -1 if her ending time is earlier than her starting time.

样例输出
SAMPLE OUTPUT (file ctiming.out):

1563

OUTPUT DETAILS:

Bessie ends the contest 1563 minutes after she starts.

**

Solution Notes:

让问题容易解决的关键是编写一个函数,将(D,H,M)转换为一个整数,该整数表示从某个预定起点开始到此刻的绝对分钟数。 在下面的示例C解决方案中,函数total_mins()计算自月初以来的总分钟数。 使用这个函数,现在很容易计算两个日期差异的分钟数 - 我们首先将两个日期转换为整数,然后简单做减法!
** A key to making the problem easy to solve is to write a function that converts from (day, hour, minute) to a single integer that reflects an absolute count of number of minutes since some pre-determined starting point. In the sample C solution below, the function total_mins() computes the total number of minutes elapsed since the beginning of the month. Using this function, it is now easy to compute the number of minutes in the difference of two dates - we first convert the two dates into integers, and then simply subtract!

#include <stdio.h>

int total_mins(int d, int h, int m)
{
  return d * 24 * 60 + h * 60 + m;
}

int main(void)
{
  int d, h, m;

  //freopen ("ctiming.in", "r", stdin);
  //freopen ("ctiming.out", "w", stdout);

  scanf ("%d %d %d", &d, &h, &m);

  if (total_mins(d,h,m) < total_mins(11,11,11))
    printf ("-1\n");
  else
    printf ("%d\n", total_mins(d,h,m) - total_mins(11,11,11));

  return 0;
}

没有更多推荐了,返回首页