题意:
如图所示的楼道。现在要在房间之间移动桌子,但是走廊太窄,一次只允许通过一张桌子。每次移动都持续十分钟。现在问对一系列的移桌子操作,所需的最少时间是多少?只要所需要的走廊空间不覆盖的移动就可以同时进行。由于数据量小,可以直接使用模拟。
建立一个长200int数组 表示走廊要使用的次数。当从x移动y号房时,就将x到y房前的走廊对应编号的int值加一。最后遍历一遍得到最大的数,乘以10即为所求。
代码如下:
#include<iostream>
using namespace std;
#include<string.h>
#include<stdio.h>
int main()
{
int n,i,cases,c,b,ans,temp;
int a[202];
cin>>cases;
while(cases--)
{
memset(a,0,sizeof(a));
cin>>n;
while(n--)
{
cin>>c>>b;
if(b<c) //原题数据 后者有可能比前者小,需注意!
{
temp=c;
c=b;
b=temp;
}
for(i=(c+1)/2;i<=(1+b)/2;i++) //将房间号转换成对应的走廊编号。
a[i]++;
}
ans=0;
for(i=1;i<=200;i++)
if(ans<a[i])ans=a[i];
printf("%d\n",ans*10);
}
system("pause");
return0;
}