题意:
在一个狭窄的走廊里将桌子从一个房间移动到另一个房间,走廊的宽度只能允许一个桌子通过。给出t,表示有t组测试数据。再给出n,表示要移动n个桌子。n下面有n行,每行两个数字,表示将桌子从a房间 移到b房间。走廊的分布图如一图所示,每移动一个桌子到达目的地房间需要花10分钟,问移动n个桌子所需要的时间。
题解:
若移动多个桌子时,所需要经过的走廊没有重合处,即可以同时移动。若有一段走廊有m个桌子都要经过,一次只能经过一个桌子,则需要m*10的时间移动桌子。设一个数组,下标值即为房间号。桌子经过房间时,该房间号为下标对应的数组值即加10。最后找到最大的数组值,即为移动完桌子需要的最短时间
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int b[1000];
int main()
{
int t,n,p,x,y;
scanf("%d",&t);
for(int i=0;i<t;i++)
{
scanf("%d",&n);
memset(b,0,sizeof(b));
int max1=0;
for(int j=0;j<n;j++)
{
scanf("%d%d",&x,&y);
if(x>y)
{
p=x;
x=y;
y=p;
}
if(x%2!=0)
x++;
if(y%2!=0)
y++;
for(int k=x;k<=y;k+=2)
b[k]+=10;
}
for(int j=0;j<400;j++)
{
if(b[j]>max1)
max1=b[j];
}
printf("%d\n",max1);
}
return 0;
}