uva 688 - Mobile Phone Coverage
2016-01-02 15:41
363 查看
经典问题,矩形面积并。
解法:一、矩形分割,每个矩形的两个横坐标和两个纵坐标排序,这样得到2n*2n个区间,对这些区间依次判断是否包含在n个矩形中间即可。
二、扫描线。具体还没实现过。
详见:http://www.algorithmist.com/index.php/UVa_688
另:http://www.ii.uni.wroc.pl/boi/index.phtml?id=11
解法:一、矩形分割,每个矩形的两个横坐标和两个纵坐标排序,这样得到2n*2n个区间,对这些区间依次判断是否包含在n个矩形中间即可。
二、扫描线。具体还没实现过。
详见:http://www.algorithmist.com/index.php/UVa_688
另:http://www.ii.uni.wroc.pl/boi/index.phtml?id=11
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int main() { int n, i, j, k, cases; double area, x[105], y[105], r[105], dx[105*2], dy[105*2]; cases = 0; while(cin>>n && n) { for(i=0; i<n; i++) { cin >> x[i] >> y[i] >> r[i]; dx[i*2] = x[i] - r[i], dx[i*2+1] = x[i] + r[i]; dy[i*2] = y[i] - r[i], dy[i*2+1] = y[i] + r[i]; } sort(dx, dx+2*n); sort(dy, dy+2*n); area = 0.0; for(i = 1; i < 2*n; i++) for(j = 1; j < 2*n; j++) for(k = 0; k < n; k++) { if(dx[i-1]>=x[k]-r[k] && dx[i]<=x[k]+r[k]) if(dy[j-1]>=y[k]-r[k] && dy[j]<=y[k]+r[k]) { area += (dx[i] - dx[i-1]) * (dy[j] - dy[j-1]); break; } } printf("%d %.2lf\n", ++cases, area); } return 0; }
相关文章推荐
- eclipse配置步骤
- 【设计模式】何为设计模式
- 动态库,静态库,LD_LIBRARY_PATH,LIBRARY_PATH,-L,-l
- 分布式数据存储 - MySQL主从复制高可用方案
- Uncaught error in rebar_core: {'EXIT',
- 排列
- 实现时间复杂度为O(1)的Push,Pop,Min
- Vim 相关设置
- ]MATLAB中的wavedec、wrcoef函数简析
- openjudge avoid the lakes
- <代码之髓>读后感
- LeetCode - Remove Duplicates from Sorted Array II
- Word
- Thinking in Java---异常处理机制
- 仲恺ACM 1010:平均绩点【java】
- 苹果开发者查看账号到期时间及续费网址
- Java 动态太极图 DynamicTaiChi (整理)
- Java中的简单工厂模式
- 双亲委派模型
- CentOS 系统启动流程