题目描述
Problem Description
丁爸信奥培训中心最近在富丽科技大厦租了一层楼,这层楼的形状如下:
由图可见,这层楼中间是走廊,两侧各有200个房间,编号如上图。
最近,丁爸信奥培训中心做了内部机构的调整,需要把一些桌子从一个房间搬到另外的房间。因为走廊很窄,但是桌子很大,所以同一段走廊每次只能通过一个桌子。
假设不论远近,每趟搬桌子都需要10分钟。同时,当你从房间i搬桌子到房间j的过程中,房间i到房间j之间的走廊都被占用,也就是说,在每个10分钟内,不能有多个任务共享同一段走廊。
现在,丁爸想知道:要完成所有的搬运任务,最少需要多少时间?
Input
输入包含T组测试用例。
每组测试用例首先是一个正整数N(1<=N<=200),表示需要搬运的桌子数量。
接下来N行,每行包含2个正整数s和t,表示需要将一个桌子从房间s搬到房间t。
Output
计算并输出完成所有的搬运任务需要的最少的时间,每组数据占一行。
输入样例
3
4
10 20
30 40
50 60
70 80
2
1 3
2 200
3
10 100
20 80
30 50
输出样例
10
20
30
#include<bits/stdc++.h>
using namespace std;
void swap(int &a,int &b);
int main()
{
int N;
cin>>N;
while(N--)
{
int a,b;
int max=-1;
int p[202]={0};
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a>>b;
a=(a-1)/2;
b=(b-1)/2;//将两边的屋子进行一致编号
swap(a,b);
for(int k=a;k<=b;k++)//记录走过的位置
p[k]++;
}
for(int i=0;i<200;i++)
if(p[i]>max)
max=p[i];//选出走过位置的最大次数,即为搬运的次数
cout<<max*10<<endl;
}
return 0;
}
void swap(int &a,int &b)
{
if(a>b)
{
int temp;
temp=a;
a=b;
b=temp;
}
}