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;

}

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

你可能感兴趣的:(table)