题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1050
题目大意:
就说有一些桌子需要从某些房间搬到另一些房间,但中间只有一条走廊,且走廊中任何一段只能同时进行一次搬运。
思路:
由于有走廊有两边,可以尝试转换成同一边,比如我要从房间6搬到房间10,等价于我从房间5搬到房间9,这样转化之后问题变成了求多个区间的最大重叠次数,直接暴力就可以了,不过有一个坑点,题意只是说从房间x搬到房间y,没说x<y,所以x,y的大小不确定,暴力时需要进行判断。
#include<iostream>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#define FOR(i, a, b) for(int i = a; i < b; i++)
using namespace std;
int n, T;
int a[];
int main()
{
cin >> T;
while(T--)
{
memset(a, , sizeof(a));
cin >> n;
int x, y, ans = ;
while(n--)
{
cin >> x >> y;
if((x&) == )x--;
if((y&) == )y--;
//cout<<x<<" "<<y<<endl;
if(x > y)swap(x, y);
for(int i = x; i <= y; i+=)a[i]++;
}
for(int i = ; i <= ; i+=)ans = max(ans, a[i]);
cout<<ans*<<endl;
}
return ;
}