链接:​​click here~​

题意:在一个长走廊里搬桌子,走廊的两侧都是房间,把桌子从一个房间搬到另外一个房间,走廊的宽度只能允许一个桌子通过,每次搬桌子需要10分钟(每一次允许再不交叉的走廊中同时搬桌子),问最少多长时间搬完!

【解题思路】

这题也是想了好久,关键点:由于房间是奇偶分开的,所以先把他们换成连续的自然数,即n=(n-1)/2.这样对门的就变成一个编号了,这点是关键,感觉好厉害(因为房间是对称分布的,需要注意一下奇偶的情况。)利用房间号分割走廊,贪心实现求走廊的最大重叠数

这里使用了C++容器的STL*max_element函数找最大元素 类似的*min_element是求函数找最小元素 .

代码:

#include <string.h>
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=205;
int a[maxn];
int main()
{
int n,m,i,j;
scanf("%d",&n);
while(n--)
{
int aa,bb;
scanf("%d",&m);
memset(a,0,sizeof(a));
for(i=0; i<m; i++){
scanf("%d%d",&aa,&bb);
if(aa>bb) swap(aa,bb);
for(j=(aa-1)/2; j<=(bb-1)/2; j++)//由于房间是奇偶分开的,所以先把他们换成连续的自然数,即n=(n-1)/2.这样对门的就变成一个编号了
a[j]++;
}
printf("%d\n",*max_element(a,a+205)*10);//寻找最大元素
}
return 0;
}