• HDU4509 湫湫系列故事——减肥记II【格式输入+存储设置+暴力+水题】


    湫湫系列故事——减肥记II

    Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
    Total Submission(s): 3458    Accepted Submission(s): 1456

    Problem Description
      虽然制定了减肥食谱,但是湫湫显然克制不住吃货的本能,根本没有按照食谱行动!
    于是,结果显而易见…
      但是没有什么能难倒高智商美女湫湫的,她决定另寻对策——吃没关系,咱吃进去再运动运动消耗掉不就好了?
      湫湫在内心咆哮:“我真是天才啊~(≧▽≦)/~”

      可是,大家要知道,过年回家多忙啊——帮忙家里做大扫除,看电影,看小说,高中同学聚餐,初中同学聚餐,小学同学聚餐,吃东西,睡觉,吃东西,睡觉,吃东西,睡觉……所以锻炼得抽着时间来。

      但是,湫湫实在太忙了,所以没时间去算一天有多少时间可以用于锻炼,现在她把每日行程告诉你,拜托你帮忙算算吧~

      皮埃斯:一天是24小时,每小时60分钟
    Input
    输入数据包括多组测试用例。
    每组测试数据首先是一个整数n,表示当天有n件事要做。 
    接下来n行,第i行是第i件事的开始时间和结束时间,时间格式为HH:MM。

    [Technical Specification]
    1. 1 <= n <= 500000
    2. 00 <= HH <= 23
    3. 00 <= MM <= 59
    Output
    请输出一个整数,即湫湫当天可以用于锻炼的时间(单位分钟)
    Sample Input
    1 15:36 18:40 4 01:35 10:36 04:54 22:36 10:18 18:40 11:47 17:53
     Sample Output
    1256 179
    Hint
    大量输入,建议用scanf读数据。
     Source

    问题链接HDU4509 湫湫系列故事——减肥记II

    问题简述参见上文。

    问题分析

    这个问题可以用线段树来解决。然而,暴力法+程序技巧也是能够解决问题的。

    一天有24小时,共24*60=1440分钟。

    给定的时间范围也许有重叠,所以可以对一天中的每件事情的每一分钟进行标记,再统计未被标记的分钟数,就是能够用于锻炼。

    程序说明

    标记数组flag[]的类型是关键,用char类型是最合适的(用int的话,既浪费存储又浪费时间),可以最佳配合函数memset(),时间上也应该是快的。

    函数memset()的使用方式也是这个程序的一个要点,该函数是可以进行局部设置的。

    题记:(略)


    参考链接:(略)


    AC的C语言程序如下:

    /* HDU4509 湫湫系列故事——减肥记II */
    
    #include <stdio.h>
    #include <string.h>
    
    #define N 24 * 60
    
    char flag[N + 1];
    
    int main(void)
    {
        int n, sh, sm, eh, em, i;
    
        while(scanf("%d", &n) != EOF) {
            memset(flag, 1, sizeof(flag));
    
            while(n--) {
                scanf("%d:%d%d:%d", &sh, &sm, &eh, &em);
    
                int start = sh * 60 + sm;
                int end = eh * 60 + em;
                memset(flag + start, 0, end - start);
            }
    
            int ans = 0;
            for(i=0; i<N; i++)
                if(flag[i])
                    ans++;
    
            printf("%d
    ", ans);
        }
    
        return 0;
    }




  • 相关阅读:
    常用的居中方法
    CSS实现盒子高度撑开且以最高的为高
    利用vertical-align实现行内元素对齐
    CSS实现模糊效果
    【LeetCode 37】解数独
    【LeetCode 36】有效的数独
    【LeetCode 35】搜索插入位置
    【LeetCode 34】在排序数组中查找元素的第一个和最后一个位置
    【LeetCode 33】搜索旋转排序数组
    【LeetCode 32】最长有效括号
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563585.html
Copyright © 2020-2023  润新知