题目:传送门
大概意思就是说:有一条走廊,两边各有两百个总共四百个房间(有编号的),任务是在这些房间之间移动桌子。当一张桌子从房间 s 移动到房间 t,那它们之间的走廊部分就被征用了,这部分的房间就不可以移动桌子,其他部分的房间可以移动桌子。移动一张桌子需要十分钟,求最短的移动桌子所花的时间。
思路:用数组mark标记走廊位置被标记的次数,若移动多个桌子时,所需要经过的走廊没有重合处,即可以同时移动。若有一段走廊有m个桌子都要经过,一次只能经过一个桌子,走过的走廊都要被标记一次,走廊被经过最多的次数乘以时间10分钟即为移动桌子所花费的最短时间。
#include<stdio.h>
int main()
{
int index,s,t;
scanf("%d",&index);
while(index--) //index个测试用例
{
int n,max=0;
int mark[201]={0};
scanf("%d",&n);
while(n--) //n个移动桌子
{
scanf("%d%d",&s,&t);
if(t<s)
{
int temp=t;
t=s;
s=temp;
}
s=(s+1)/2;//因为房间是分两排,相当于走廊的部分
t=(t+1)/2;
for(int i=s;i<=t;i++)
mark[i]++; //被占用的走廊部分+1
}
for(int i=1;i<201;i++) //标记出走廊被标记的最大值
{
if(mark[i]>max)
max=mark[i];
}
printf("%d\n",max*10);
}
return 0;
}