HDU-1050 Moving Tables
开始的时候直接当成求线段重叠条数的题,发现这种思路完全是错的
比如 1 - 3,2 - 4,3 - 5 这一组,只需搬动两次即可,但找重叠线段的话就会找到 3 条重叠线段。
还有一个坑点在于走廊两侧都有房间也就是说room1和room2对应的位置是一样的1 to 3 4to6 是没法同时完成的 所以要计算成楼道号进行运算
计算重叠度
注意可能存在从后往前与从前往后两种情况 统一成一种情况进行计算
#include <bits/stdc++.h>
using namespace std;
#define MAX 210
int a[MAX];
int main()
{
int n1;
scanf("%d",&n1);
while(n1--){//外循环表示 有多少个数组
int n2;
int f1,f2,max,temp;
max=0;//记录楼道号重叠度的最大数
memset(a, 0, sizeof a);//初始化数组
scanf("%d",&n2);
while (n2--){//表示要搬运的桌子数
scanf("%d %d",&f1,&f2);//读取起始位置
f1=(f1-1)/2;//将房间号转换成楼道序号
f2=(f2-1)/2;
if(f1>f2){
temp=f1;f1=f2;f2=temp;//统一好方向 从小到大
}
int i;
for (i=f1;i<=f2;i++){
a[i]++;//该数组用于存储该楼道号路过的次数
if(a[i]>max){//超过之前的记录了就替换
max=a[i];
}
}
}
printf("%d\n",max*10);
}
return 0;
}