poj 1151 Atlantis
2012-09-21 13:20
211 查看
题目链接:http://poj.org/problem?id=1151
题目大意:矩形面积并。
题目思路:矩形切割。
题目大意:矩形面积并。
题目思路:矩形切割。
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<string> #include<queue> #include<algorithm> #include<vector> #include<stack> #include<list> #include<iostream> #include<map> #include<math.h> using namespace std; #define inf 0x3f3f3f3f #define uint unsigned __int64 #define M 10000 struct node { double p1[2],p2[2]; }a[M],now; int total; int judge(node a,node b) { for(int i=0;i<2;i++) { if(a.p2[i]<=b.p1[i]||a.p1[i]>=b.p2[i]) return 0; } return 1; } void cut(node tmp) { int k1,k2; for(int i=0;i<2;i++) { k1=max(tmp.p1[i],now.p1[i]); k2=min(tmp.p2[i],now.p2[i]); if(tmp.p1[i]<k1) { a[++total]=tmp; a[total].p2[i]=k1; } if(tmp.p2[i]>k2) { a[++total]=tmp; a[total].p1[i]=k2; } tmp.p1[i]=k1; tmp.p2[i]=k2; } } int main() { int n,i,j,count=1; while(scanf("%d",&n),n) { total=0; for(i=1;i<=n;i++) { scanf("%lf%lf%lf%lf",&now.p1[0],&now.p1[1],&now.p2[0],&now.p2[1]); for(j=total;j>=1;j--) { if(judge(now,a[j])) { cut(a[j]); a[j]=a[total--]; } } a[++total]=now; } double sum=0.0; for(i=1;i<=total;i++) sum+=(a[i].p2[0]-a[i].p1[0])*(a[i].p2[1]-a[i].p1[1]); printf("Test case #%d\n",count++); printf("Total explored area: %.2lf\n",sum); puts(""); } }
相关文章推荐
- poj 1151 Atlantis 纯矩形面积并
- POJ 1151 - Atlantis 线段树+扫描线..
- POJ 1151 Atlantis (线段树求矩形面积并)
- POJ_1151 Atlantis(线段树)
- poj 1151 Atlantis(线段树+扫描线)
- POJ 1151 Atlantis
- poj 1151 Atlantis 二分查找+离散化
- POJ 1151 / HDU 1542 Atlantis 线段树求矩形面积并
- POJ 1151 Atlantis(扫描线 + 线段树 矩形面积的并)
- 【POJ】1151 Atlantis(线段树)
- poj-1151-Atlantis-线段树求面积并
- POJ 1151 Atlantis 矩形切割 || 线段树 扫描线
- poj 1151 Atlantis 求矩形面积并
- HDU 1542 && POJ 1151 Atlantis(线段树+扫描线)
- HDOJ 1542 (POJ 1151) Atlantis 【线段树 离散化 扫描线 面积并】
- poj_1151 Atlantis && poj_1177 Picture(线段树+扫描线+离散化)
- 【线段树 + 离散化 + 扫描线】poj 1151 Atlantis 矩形面积并
- poj-1151-Atlantis-离散化+标记
- POJ 1151 Atlantis(离散化+暴力)
- POJ 1151 / HDU 1542 Atlantis 线段树求矩形面积并