【贪心】Moving Tables POJ 1083
2017-07-15 15:11
459 查看
题目链接:http://poj.org/problem?id=1083
题目大意:走廊上的房间如下图设置,现在有n个移动桌子的任务,把桌子从xi移动到yi(整个过程中会占用xi到yi房间之间的走廊),每次移动10分钟,可以同时进行但走廊只有一个桌子宽(即不能共用走廊)。问最少多少分钟。
我们可以把移动桌子看成一个区间,有重叠部分的区间是不可以同时进行的。所以问题转换为了求区间重叠的最大个数。因为如图的房间设置,我们可以把奇数看做偶数(1看做2,3看做4,2k+1看做2k+2)。于是我们的数就变为了2、4、6...400。便于计算在除以2,即为1到200的正整数。
在这里求一个点上的覆盖区间个数要用到差分的思想,用一个数组a来计算。对于一个区间[x,y],把a[x]++,a[y+1]--。那么你要统计一个点上区间个数就是它的前缀和。
代码如下:
题目大意:走廊上的房间如下图设置,现在有n个移动桌子的任务,把桌子从xi移动到yi(整个过程中会占用xi到yi房间之间的走廊),每次移动10分钟,可以同时进行但走廊只有一个桌子宽(即不能共用走廊)。问最少多少分钟。
我们可以把移动桌子看成一个区间,有重叠部分的区间是不可以同时进行的。所以问题转换为了求区间重叠的最大个数。因为如图的房间设置,我们可以把奇数看做偶数(1看做2,3看做4,2k+1看做2k+2)。于是我们的数就变为了2、4、6...400。便于计算在除以2,即为1到200的正整数。
在这里求一个点上的覆盖区间个数要用到差分的思想,用一个数组a来计算。对于一个区间[x,y],把a[x]++,a[y+1]--。那么你要统计一个点上区间个数就是它的前缀和。
代码如下:
#include<cstdio> #include<cmath> #include<cstring> #include<algorithm> using namespace std; int n,x,y,a[205],t; int main() { scanf("%d",&t); while(t--) { memset(a,0,sizeof a); scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d",&x,&y); if(x&1)x++;if(y&1)y++; x/=2,y/=2; if(x>y)x^=y,y^=x,x^=y; a[x]++;a[y+1]--; } int mx=0; for(int i=1;i<=200;i++) a[i]+=a[i-1],mx=a[i]>mx?a[i]:mx; printf("%d\n",mx*10); } }
相关文章推荐
- POJ 1083 && HDU 1050 Moving Tables (贪心)
- Poj_1083 Moving Tables(贪心,测试数据)
- POJ 1083 Moving Tables(贪心!!)
- POJ 1083 Moving Tables 贪心
- POJ 1083 Moving Tables(贪心)
- POJ 1083 Moving Tables (贪心)
- POJ- 1083-Moving Tables-贪心
- POJ 1083 && HDU 1050 Moving Tables (贪心)
- POJ 1083 && HDU 1050 Moving Tables(贪心)
- POJ 1083 Moving Tables 搬桌子
- POJ 1083 Moving Tables(模拟)
- POJ 1083 Moving Tables(搬桌子)
- POJ1083--Moving Tables
- ACM——POJ 1083(Moving Tables)
- poj 1083 Moving Tables
- POJ1083 HDU1050 ZOJ1029 UVALive2326 Moving Tables【序列+最值】
- POJ1083,Moving Tables,好纠结的题
- POJ-1083-Moving Tables-2013-11-26 16:43:58
- POJ 1083 Moving Tables(水题)
- POJ 1083 Moving Tables