题目描述

        在一个狭窄的走廊里将桌子从一个房间移动到另一个房间,走廊的宽度只能允许一个桌子通过。给出 t,表示有 t 组测试数据,再给出 n,表示要移动 n 个桌子。n 下面有 n 行,每行两个数字,表示将桌子从 a 房间移动到 b 房间。走廊的分布图如图所示,每移动一个桌子到达目的地需要 10 分钟,问移动 n 个桌子需要的时间。

输入
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;
/*整体思路:
每搬运一趟,房间的路线重叠度就少一,所以只需找出重叠度最大的房间号即为需要的搬运次数
*/
int main() {
	int t,n,s,e,max,p[200];//p来存每个房间重叠度
	cin>>t;
	while(t--) {
		for(int i=0;i<200;i++) {//每次处理新的一组数据时刷新p;
			p[i]=0;
		}
		cin>>n;
		for(int i=0; i<n; i++) {
			cin>>s>>e;
			s=(s-1)/2;//处理房间号对门,使对门房间号对应的p下标一样
			e=(e-1)/2;
			if(s>e) {//如果开始房间号小于结束房间号则交换,不影响房间重叠度
				int temp=s;
				s=e;
				e=temp;
			}
			for(int j=s; j<=e; j++) { //从起点到终点每一个房重叠度都加1
				p[j]++;
			}
		}
		max=-1;
		for(int k=0; k<=e; k++) {//找出最大重叠度的房间
			if(p[k]>max) {
				max=p[k];
			}
		}
		cout<<max*10<<endl;
	}
	return 0;
}

更多推荐