Moving Tables POJ - 1083 (思维)

题目大意

在一层楼上推桌子,每个空间一次只能推1种桌子,且消耗十分钟。可以同时推多个桌子,但是他们所占的空间不能是相交的如图

解法

真的很考验思维能力,首先考虑到这个走廊是有两排的,我瞬间想到了宿舍楼。。。

发现1 2是对着的3 4是对着的一个空间而2 3是两个空间这该怎么办好呢?

我们可以把他们化成1 2这种格式,即奇数左边界偶数右边界,即小的如果是偶数那么-1大的边界如果是奇数那么加一2 3可以化解成1 4是两个空间了,然后计算最大重复空间即可了

代码

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int bk[1000];
int main()
{
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int t;
  cin>>t;
  while(t--)
  {
    memset(bk,0,sizeof(bk));
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
      int t1,t2;
      cin>>t1>>t2;
      if(t1>t2)
      swap(t1,t2);
      if(t1%2==0)
      t1--;
      if(t2%2==1)
      t2++;
      for(int i=t1;i<=t2;i++)
      bk[i]++;
    }
    int maxn=-1;
    for(int i=1;i<=400;i++)
    maxn=max(maxn,bk[i]);
    cout<<maxn*10<<"\n";
  }
}
posted @ 2018-12-12 16:23  baccano!  阅读(163)  评论(0编辑  收藏  举报