您的位置:首页 > 其它

ACM 会场安排问题 最简单的解法

2015-01-10 22:19 260 查看
    /*会场安排问题   ACM  第一行有1 个正整数k,表示有k 个待安排的活动。接下来的k 行中,每行有2 个正整数,分别表示k 个待安排的活动开始时间和结束时间。时间以0 点开始的分钟计。

     希望使用尽可能少的会场.  设计算法求出 需要的最少会场数.

    */

    

    // 这道题有很多种做法, 最流行的时贪心算法

    // 但我发现了一个 特殊的做法 ,可以把这道题变得 非常简单

#define NUM 1440

int main(int argc, const char * argv[]) {

    

    // 这道题时间最小剂量时间是分钟  那么 一天有  24 * 60 = 1440 分钟

    int times[NUM] = {0};

    int theMeetingCount = 0;//会场数;

    int beginTime = 0, endTime = 0;//每个会场的开始 结束 时间;

    scanf("%d", &theMeetingCount);//得到会场数

    for (int i = 0; i < theMeetingCount; i++) {

        scanf("%d %d", &beginTime, &endTime);

        for (int j = beginTime; j <= endTime; j++) {

            times[j] += 1;

        }

    }

    int max = 0;

    for (int i = 0; i < NUM; i++) {

        max = max > times[i] ? max : times[i];//得到times 数组中最大的值

    }

    printf("%d", max);//这个最大值就是需要的最少会场数  很神奇哦  不信 试试!

    

    return 0;

}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息