POJ 1151 Atlantis(离散化)
2016-04-25 11:32
302 查看
大意:求出不重叠矩形的面积交。
思路:同两个x[],y[]分别放x,y坐标,然后枚举标记所有的矩形范围。
最后两相邻点,来求面积。
思路:同两个x[],y[]分别放x,y坐标,然后枚举标记所有的矩形范围。
最后两相邻点,来求面积。
求出不重叠矩形的面积交。 #include<map> #include<queue> #include<cmath> #include<cstdio> #include<stack> #include<iostream> #include<cstring> #include<algorithm> #define ll long long #define LL unsigned __int64 #define inf 0x3f3f3f3f #define eps 1e-8 #include<vector> using namespace std; struct node{ double x,y,x1,y1; }q[100010]; double x[233],y[233]; bool mp[233][233]; int main(){ int n,m,i,j,k,cla = 1; while(~scanf("%d",&n)&&n){ k = 0; memset(x,0,sizeof(x)); memset(y,0,sizeof(y)); for(i = 0;i < n;++ i){ scanf("%lf%lf%lf%lf",&q[i].x,&q[i].y,&q[i].x1,&q[i].y1); x[k] = q[i].x; y[k++] = q[i].y; x[k] = q[i].x1; y[k++] = q[i].y1; } sort(x,x+2*n);sort(y,y+2*n); memset(mp,false,sizeof(mp)); double ans = 0; for(k = 0;k < n;++ k){ int a,b,aa,bb; for(a = 0;a < 2*n;++ a) if( fabs(x[a] - q[k].x)<=eps ) break; for(b = 0;b < 2*n;++ b ) if( fabs(y[b] - q[k].y)<=eps ) break; for(aa = 0;aa < 2*n;++ aa) if( fabs(x[aa] - q[k].x1)<=eps ) break; for(bb = 0;bb <2*n ;++ bb) if( fabs(y[bb] - q[k].y1)<=eps ) break; for(i = a;i < aa;++ i){ for(j = b;j < bb ;++ j){ mp[i][j] = true; } } } for(i = 0;i < 2*n;++ i){ for(j = 0;j < 2*n;++ j){ if(mp[i][j]) ans += (x[i+1]-x[i])*(y[j+1]-y[j]); } } printf("Test case #%d\nTotal explored area: ",cla++); printf("%.2f\n\n",ans); } return 0; }
相关文章推荐
- 数据挖掘:基于卡方的ChiMerge方法对数值离散化(稀有数据挖掘答案代码)
- poj 2528
- Sicily 1045 Space Management
- TopCoder - SRM521 div1 500 RangeSquaredSubsets
- HDU 1542 Atlantis (线段树 +离散化+ 扫描线)
- hdu 1856 离散化+并查集
- poj 3368 离散化+线段树+二分
- hiho #1079 离散化
- lightoj 1085
- HDU3436[离散化splay]
- 【SGU 180】Inversions —— 归并排序或树形数组计算逆序对
- CodeForces 85D Sum of Medians(线段树 + 离散化)
- POJ 2546 Circular Area
- vijos 1056 图形面积
- UVAlive3532 Nuclear Plants
- POJ 2528 Mayor's posters
- codeforces 29C Mail Stamps(dfs)
- bzoj-3585 mex
- bzoj-3131 淘金
- 1034. Head of a Gang (30)【离散化+并查集+搜索】——PAT (Advanced Level) Practise