题目大意:就是在双侧南北房间之间移动桌子,走廊很窄,所有的桌子都很大,只有一张桌子能在走廊上移动。共享走廊的两个房间之间的移动必须按先后顺序执行,不共享走廊的两个房间之间的移动则可以同时进行。
注意:Input中第一个房间号可能大于第二个房间号,因此我用了swap()函数。
思路:
- 首先将走廊两侧的房间看作两个同等大小的数组,下标均为0-200。房间号为奇数,则房间号除以2就是下标。房间号为偶数,则房间号除以2减1就是下标。
- 然后定义一个room数组,相当于走廊,移动过程中经过了哪几个房间,则对应位置room值遍历数加1。
- room数组中某元素的值大于1,则说明该位置不止一次被到达过,即被共享。最后找到room数组中最大的数再乘以10即为解。
代码:
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
void swap(int *x,int *y);
int main()
{
int room[250]={0};
int T,a,b,max,i,j;
cin>>T;
while(T--){
memset(room,0,sizeof(room));
int num;
cin>>num;
for(i=0;i<num;i++){
cin>>a>>b;
if(a>b) swap(&a,&b);
if(a%2==0) a=a/2-1;
else a=a/2;
if(b%2==0) b=b/2-1;
else b=b/2;
for(j=a;j<=b;j++)
room[j]++;
}
max=*max_element(room,room+200);
cout<<max*10<<endl;
}
}
void swap(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
max_element函数介绍见https://www.jb51.net/article/180520.htm