poj 1468 Rectangles
2012-12-15 21:58
387 查看
题目:给定n个矩形,问有多少个被完全覆盖。
分析:暴力。这道题目想了很久除了暴力想不出更好的方法了,因为数据范围不清楚,只有点的个数,没有点的范围。最后只能利用Dancing_links的链表做优化,利用L,R两个指针数组把排好序的矩形构造成链表,每次找到一个被覆盖的矩形,直接从链表中删除。最后运行时间还是600ms左右,总觉得应该又更好的算法。
说明:在讨论版中看到有人说用树状数组,木有想出来怎么写= =!。
分析:暴力。这道题目想了很久除了暴力想不出更好的方法了,因为数据范围不清楚,只有点的个数,没有点的范围。最后只能利用Dancing_links的链表做优化,利用L,R两个指针数组把排好序的矩形构造成链表,每次找到一个被覆盖的矩形,直接从链表中删除。最后运行时间还是600ms左右,总觉得应该又更好的算法。
说明:在讨论版中看到有人说用树状数组,木有想出来怎么写= =!。
#include <algorithm> #include <iostream> #include <cstdlib> #include <cstdio> #include <cmath> using namespace std; typedef struct nodep { int minx,miny,maxx,maxy; }point; point P[ 5005 ]; int L[ 5005 ]; int R[ 5005 ]; bool cmp( point a, point b ) { if ( a.minx == b.minx ) { if ( a.miny == b.miny ) { if ( a.maxx == b.maxx ) return a.maxy < b.maxy; else return a.maxx < b.maxx; }else return a.miny > b.miny; }else return a.minx > b.minx; } int main() { int n; while ( scanf("%d",&n) != EOF ) { for ( int i = 1 ; i <= n ; ++ i ) scanf("%d%d%d%d",&P[i].minx,&P[i].maxx,&P[i].miny,&P[i].maxy); sort( P+1, P+n+1, cmp ); for ( int i = 0 ; i <= n ; ++ i ) { L[i] = i-1; R[i] = i+1; } int count = 0; for ( int i = 1 ; i <= n ; ++ i ) { for ( int j = R[0] ; j != i ; j = R[j] ) if ( P[i].minx <= P[j].minx && P[i].miny <= P[j].miny && P[i].maxx >= P[j].maxx && P[i].maxy >= P[j].maxy ) { R[L[j]] = R[j]; L[R[j]] = L[j]; count ++; if ( P[i].minx == P[j].minx && P[i].miny == P[j].miny && P[i].maxx == P[j].maxx && P[i].maxy == P[j].maxy ) { R[L[i]] = R[i]; L[R[i]] = L[i]; count ++; } } } printf("%d\n",count); } return 0; }
相关文章推荐
- poj 1468 Rectangles
- poj 1468 Rectangles
- POJ 1468 Rectangles
- zoj 1139 || poj 1468 Rectangles
- POJ 1468 Rectangles 笔记
- POJ 1468 Rectangles(判定点在平行坐标轴的矩形内)
- POJ 1468
- 【POJ】【1741】/【BZOJ】【1468】Tree
- Poj 3695-Rectangles 矩形切割
- poj 3695 Rectangles 容斥原理解矩形面积并
- POJ 3695 Rectangles
- POJ 3695 Rectangles(容斥)
- poj 1741 bzoj1468 Tree
- Rectangles - POJ 3695 容斥原理
- 【POJ 1741】【BZOJ 1468】【BZOJ 3365】【点分治模板题】Tree
- POJ 1741|BZOJ 1468|Tree|树分治
- poj 3695 Rectangles(容斥原理)
- 1468 Rectangles
- POJ 3695 Rectangles 笔记
- poj 3695 Rectangles(矩形切割)