HDU 1050 Moving Tables

#include <cstdio>
#include <algorithm> 
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
    {
        int x[300]={0};
        int m,a,b,s,max;
        scanf("%d",&m);
        for(int j=1; j<=m; j++)
        {
          scanf("%d%d",&a,&b);
          if (a>b)
          {
              int t=a;
              a=b;
              b=t;
          }
          a=(a+1)/2;
          b=(b+1)/2;
          x[a]++; 
          x[b+1]--;
        }
        max=0; s=0;
        for(int j=1; j<=200; j++)
        {
            s+=x[j];
            if (s>max) max=s;
        }
        printf("%d\n",max*10);    
    }
    return 0;
}

题解:我们将每一个房间映射到走廊上,对于移动操作,只要对建立的走廊数组首端加一,末端的后一个储存单位减一,最后计算数组前缀和的最大值即可。

posted @ 2013-12-22 14:13  forever97  阅读(122)  评论(0编辑  收藏  举报