码迷,mamicode.com
首页 > 其他好文 > 详细

hdu acm-step 1.3.1 Moving Tables

时间:2017-08-16 20:21:12      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:blog   最短时间   for循环   png   amp   技术分享   using   .com   class   

技术分享技术分享

          本题题意是:有一个走廊以及200组互相对着的房间,现在要在不同的房间之间送信,但走廊一次只能通过一个人,因此一旦两个人的路线有重复的部分,那么

          就只能分两批走,送一次信要10分钟,现在给出n个人送信的路线,求他们所花的最少时间。

          代码如下:

          

#include <cstdio>

using namespace std;


int main()
{
    
    int T;

    scanf("%d",&T);

    while(T--)
    {

        int a[201] = {0};

        int n;

        scanf("%d",&n);
    
        int l,r;

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

            scanf("%d%d",&l,&r);        

            l = (l + 1) / 2;

            r = (r + 1) / 2;
                
            if(l > r)
            {

                int t = l;

                l = r;

                r = t;

            }

            for(int i=l;i<=r;i++)
            {

                a[i]++;        

            }            

        }
                
        int max = 0; 

        for(int i=1;i<=200;i++)

            max = max > a[i] ? max : a[i];        

        printf("%d\n",max*10);

    }

    return 0;

}

其实仔细想想就会发现每两个相对的房间可以划分为1个区域,这样400个房间就能划分为200个区域。

然后再分析路线相交的情况有三种:"完全不相交,部分相交,重合"。

又发现三个人如果不是三人的路线都有重合,那么它们的时间是20。

仔细推理就可以发现只需要求每个人房间经过的人数,然后取其中最大值便是最短时间,因为总有m个人通过该房间,无论怎么调度,这m次是无法避免的。

我们只需要用数组模拟房间经过的人数,然后取最大值,便得到了结果。

需要注意的是,大编号房间到小编号房间时,注意交换两者的序号,否则for循环不会执行(TAT,之前还以为自己写错了,但怎么看逻辑都是对的)。

hdu acm-step 1.3.1 Moving Tables

标签:blog   最短时间   for循环   png   amp   技术分享   using   .com   class   

原文地址:http://www.cnblogs.com/mtl6906/p/7375204.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!