题目大意:有如图所示的走廊,需要搬桌子,一个走廊只允许搬运一个桌子,没有相互影响(同时占用同一个走廊)的房间搬运
可以同时进行。求最小需要多久才能办完所有的桌子。
方法一:
搬桌子需要路过房间号次数为0,如果存在路过则+1,交叉则再次+1。最后求出最大的次数即为最小搬运的次数,再*10既为时间。
#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#include<math.h>
#include<string>
#include<cstring>
#include<string.h>
#include<algorithm>
#include<algorithm>
#include<iostream>
using namespace std;
typedef struct room {
int room_s;
int room_t;
};
int main() {
int t, n;
int flag[410];
room r[210];
cin >> t;
while (t--) {
cin >> n;
memset(flag,0,sizeof(flag));
for (int i = 0; i < n;i++) {
cin >> r[i].room_s >> r[i].room_t;
if (r[i].room_s > r[i].room_t)//出门<入门
{
int temp = r[i].room_t;
r[i].room_t = r[i].room_s;
r[i].room_s = temp;
}
if (r[i].room_s % 2 == 0)//因为屋子南北侧分布,因此10-20号时,9号走廊也被占用.
flag[r[i].room_s - 1]++;
if (r[i].room_t % 2 != 0)//因为屋子南北侧分布,因此10-19号时,20号走廊也被占用.
flag[r[i].room_t + 1]++;
for (int j = r[i].room_s;j < r[i].room_t;j++)
flag[j]++;
}
int max = 0;
for (int i = 0; i < 410;i++)//路过屋子最大的次数即为需要错开时间的次数
if (flag[i] > max)
max = flag[i];
cout << max*10 <<endl;
}
system("pause");
return 0;
}