欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Moving Tables

程序员文章站 2022-03-26 11:30:05
...

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

输入:
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

**分析:1、如果没有交叉,总时间应该是10.
2、影响搬运时间的因素是什么?
3、如果每趟处理都包含最大重叠,处理后的效果是层数最多的那个乘以10。
**

代码实现:

#include <iostream> 
using namespace std;
int main()
{
	int t, i, j, N, P[200];
	int s, d, temp, k, min;
	cin >> t;
	for (i = 0; i<t; i++)
	{
		for (j = 0; j<200; j++) P[j] = 0;
		cin >> N;
		for (j = 0; j<N; j++)
		{
			cin >> s >> d;
			s = (s - 1) / 2;
			d = (d - 1) / 2;
			if (s>d)//每次都让低的为s,高的为d
			{
				temp = s;
				s = d;
				d = temp;
			}
			for (k = s; k <= d; k++) P[k]++;//让s到d的数都自增
		}
		min = -1;
		for (j = 0; j<200; j++)
		if (P[j]>min) min = P[j];//找度数最大(层数)
		cout << min * 10 << endl;
	}
	return 0;
}