1. 程式人生 > >Moving Tables POJ - 1083 (思維)

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";
  }
}