首页 > 代码库 > POJ 1083 Moving Tables

POJ 1083 Moving Tables

【题目简述】:题目的大概意思就是,现在要在个个房间之间搬桌子,但是只有一条很窄的走廊,每次只能过一个桌子,而且每搬一个桌子要10分钟,所以如果我们要搬的任意两个桌子之间的起点与终点有重合的地方,就要再等10分钟。然后输入要搬几个桌子以及要搬的每个桌子是从哪个房间到哪个房间,问我们最短需要花多少时间。

【分析】:如果区间有重合就要加上额外的10分钟,所以我们只需要算出在哪一段走廊上重合的次数最多,然后用重合的次数乘以10就是我们要求的最短时间。

代码如下:

// 268K 16Ms
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;

int corrider[401];
int main()
{
	int t,N;
	int i,j;
	int x,y;// 区间x,y。
	cin>>t;
	while(t--)
	{
		cin>>N;
		memset(corrider,0,sizeof(corrider));
		for(i = 0; i<N;i++)
		{
			cin>>x>>y;
			if(x>y)
				swap(x,y);
			if(x%2==0)         // 如果左区间是偶数,就要将其减一,因为此时减一的那个奇数值是与它共用一段走廊
				x = x-1;
			if(y%2!=0)         // 同理,如果右区间是奇数,就要加一。
				y = y+1;
			for(j = x;j<=y;j++)
				corrider[j]++;
		}
		sort(corrider,corrider+401);
		cout<<corrider[400]*10<<endl; 
	}
	return 0;
}


POJ 1083 Moving Tables