[POJ1083 Moving Tables]

[关键字]:模拟

[题目大意]:一共有400个房间分布在走廊两侧,一侧是1、3、5、7……399另一侧是2、4、6、8……400,有多个操作要求从一个屋子搬一张桌子到另一个屋子如果两个操作占用了一段公共走廊则不能同时进行,每进行一组操作花费十分钟,问最小花费。

//========================================================================================================================

[分析]:一开始想歪了导致这么简单的题都做了半天。可以想到如果某一段走廊有超过以次操作那么这些操作必定要分开完成,而所需的最大时间就是每个走廊段最多被几个操作覆盖*10.

[代码]:

View Code
#include<iostream>

#include<cstdio>

#include<cstdlib>

#include<cstring>

#include<algorithm>

using namespace std;



const int MAXN=300;



struct node

{

int x,y;

}a[MAXN];

int n;



int main()

{

freopen("in.txt","r",stdin);

freopen("out.txt","w",stdout);

int test,x,y;

scanf("%d",&test);

while (test--)

{

scanf("%d",&n);

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

{

scanf("%d%d",&x,&y);

a[i].x=(x+1)/2,a[i].y=(y+1)/2;

if (a[i].x>a[i].y) swap(a[i].x,a[i].y);

}

int ans=0;

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

{

int temp=0;

for (int j=1;j<=n;++j)

if (a[j].x<=i && i<=a[j].y) ++temp;

if (ans<temp) ans=temp;

}

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

}

return 0;

}



你可能感兴趣的:(table)