poj3168 Barn Expansion【计算几何 平面扫描】
and/or sides with other barns.
Since he has extra cows to milk this year, FJ would like to expand some of his barns. A barn has room to expand if it does not share a corner or a wall with any other barn. That is, FJ can expand a barn if all four of its walls can be pushed outward by at least
some amount without bumping into another barn. If two barns meet at a corner, neither barn can expand.
Please determine how many barns have room to expand.
Input
Lines 2..N+1: Four space-separated integers A, B, C, and D, describing one barn. The lower-left corner of the barn is at (A,B) and the upper right corner is at (C,D).
Output
Sample Input
5
0 2 2 7
3 5 5 8
4 2 6 4
6 1 8 6
0 0 8 1
Sample Output
2
Hint
There are 5 barns. The first barn has its lower-left corner at (0,2) and its upper-right corner at (2,7), and so on.
Only two barns can be expanded --- the first two listed in the input. All other barns are each in contact with at least one other barn.
思路:
把四条边拆开 存到两个数组里
排序 y方向的先按照x排 再按照y方向上的起点排
x方向同理
遍历 对于每一个点 所有loc和他相同的 看看在不在重合范围内 并且更新范围
对于这个点本身的计数要特别一点 不然会重复
用cin cout会T 还是不长记性哦
可能真的痛经痛傻了 洗洗睡了洗洗睡了
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
#define PI 3.1415926
#define EPS 1.0e-6
struct Point {
Point(){}
Point(double x, double y, double z):x(x), y(y), z(z){}
double x,y, z;
};
struct rect{
Point left_bottom;
Point right_up;
};
struct barn{
int index;
int st, ed, loc;
}hh[500005], ll[500005];
bool cmp(barn a, barn b)
{
if(a.loc == b.loc)
return a.st < b.st;
return a.loc < b.loc;
}
int n, ans;
rect rec[25005];
bool vis[25005];
void solve(barn *bar, int n)
{
int i = 0;
while(i < n){
/*if(vis[bar[i].index]){
i++;
continue;
}*/
int pos = bar[i].loc;
int cnt = 0;
int first = i;
int ed = bar[i].ed;
i++;
while(i < n && bar[i].loc == pos && bar[i].st <= ed){
if(bar[i].ed > ed) ed = bar[i].ed;
if(!vis[bar[i].index]){
vis[bar[i].index] = true;
ans--;
}
cnt++;
i++;
}
if(cnt){
if(!vis[bar[first].index]){
vis[bar[first].index] = true;
ans--;
}
}
}
}
int main()
{
//while(cin>>n){
scanf("%d",&n);
ans = n;
//memset(vis, 0, sizeof(vis));
for(int i = 0; i < n; i++){
int left, bottom, right, up;
scanf("%d%d%d%d",&left, &bottom, &right, &up);
hh[2 * i].index = hh[2 * i + 1].index = i;
ll[2 * i].index = ll[2 * i + 1].index = i;
hh[2 * i].st = hh[2 * i + 1].st = bottom;
hh[2 * i].ed = hh[2 * i + 1].ed = up;
hh[2 * i].loc = left;hh[2 * i + 1].loc = right;
ll[2 * i].st = ll[2 * i + 1].st = left;
ll[2 * i].ed = ll[2 * i + 1].ed = right;
ll[2 * i].loc = bottom; ll[2 * i + 1].loc = up;
}
sort(hh, hh + 2 * n, cmp);
sort(ll, ll + 2 * n, cmp);
solve(hh, 2 * n);
solve(ll, 2 * n);
//int ans = 0;
//for(int i = 0; i < n; i++){
// if(!vis[i])ans++;
//}
printf("%d\n", ans);
//}
return 0;
}
poj3168 Barn Expansion【计算几何 平面扫描】的更多相关文章
- poj 3168 Barn Expansion
Barn Expansion Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2465 Accepted: 666 Des ...
- poj 3168 Barn Expansion 几何yy
题链:http://poj.org/problem? id=3168 Barn Expansion Time Limit: 1000MS Memory Limit: 65536K Total Su ...
- POJ 3168 Barn Expansion (几何+排序)
题目链接:id=3168">POJ 3168 Barn Expansion 题意:抽象出来就是给出n个矩形的坐标是(左下角和右上角的坐标,矩形的边都是平行x,y轴),问有几个矩形和其它 ...
- POJ 2932 平面扫描 /// 判断圆的包含关系
题目大意: 平面上有n个两两不相交的圆,给定圆的圆心(x,y)和半径 r 求所有最外层的 即 不包含于其他圆内部的圆 挑战258页 平面扫描 记录所有圆的左端和右端 排序后 逐一扫描 将到当前圆为止的 ...
- 基于正向扫描的并行区间连接平面扫描算法(IEEE论文)
作者: Panagiotis Bouros ∗Department of Computer ScienceAarhus University, Denmarkpbour@cs.au.dkNikos M ...
- 计算几何 平面最近点对 nlogn分治算法 求平面中距离最近的两点
平面最近点对,即平面中距离最近的两点 分治算法: int SOLVE(int left,int right)//求解点集中区间[left,right]中的最近点对 { double ans; //an ...
- poj_3168 平面扫描
题目大意 给定平面上N个矩形的位置(给出矩形的左下角和右上角的坐标),这些矩形有些会有重叠,且重叠只会出现矩形的边重合全部或部分,矩形的顶点重合,而不会出现一个矩形的顶点位于另一个矩形的内部. ...
- POJ 3168 Barn Expansion (几何基础)
[题目链接] http://poj.org/problem?id=3168 [题目大意] 给出一些矩形,没有相交和包含的情况,只有相切的情况 问有多少个矩形没有相切或者边角重叠 [题解] 我们将所有的 ...
- TTTTTTTTTTTTTTT poj 2932 Coneology 平面扫描+STL
题目链接 题意:有n个圆,圆之间不存在相交关系,求有几个不被其他任何圆包含的圆,并输出圆的编号: #include <iostream> #include <cstdio> # ...
随机推荐
- ajax+json+Struts2实现list传递(转载)
一.首先需要下载JSON依赖的jar包.它主要是依赖如下: json-lib-2.2.2-jdk15 ezmorph-1.0.4 commons-logging-1.0.4 c ...
- 使用editorconfig配置你的编辑器
摘要: 在团队开发中,统一的代码格式是必要的.但是不同开发人员使用的编辑工具可能不同,这样就造成代码的differ.今天给大家分享一个很好的方法来使不同的编辑器保持一样的风格. 不同的编辑器也有设置代 ...
- JS有趣的单线程
一.JS的执行特点 源于单线程的特性, JS在一段时间内只能执行一部分代码, 那么, 当有多块代码需要执行时, 就需要排队等候了. 二.单线程与异步事件 (1) 什么是异步事件? 异 ...
- Netty权威指南之伪异步I/O编程
为了解决同步阻塞I/O一个链路需要一个线程处理问题,对BIO模型做了优化——后端通过一个线程池处理多个客户端的请求接入,设置线程最大值,防止线程并发接入导致的线程耗尽. 当有新的客户端接入时,将客户端 ...
- PHP代码审计笔记--文件包含漏洞
有限制的本地文件包含: <?php include($_GET['file'].".php"); ?> %00截断: ?file=C://Windows//win.in ...
- Splash images_enabled 属性
images_enabled属性用于设置加载页面时是否加载图片,如下,禁止之后,返回的页面截图就不会带有任何图片,加载速度也会快很多 function main(splash, args) splas ...
- Unity 蓝牙插件
1.新建一个Unity5.6.2f1工程,导入正版Bluetooth LE for iOS tvOS and Android.unitypackage2.用JD-GUI反编译工具查看unityandr ...
- ARM入门最好的文章
一 首先说说arm的发展 可以用一片大好来形容,翻开各个公司的网站,招聘里面嵌入式占据了大半工程师职位.广义的嵌入式无非几种:传统的什么51.avr.pic称做嵌入式微控制器:arm是嵌入式微处理器 ...
- jinja2主要语法
jinja2主要语法 1.变量 {{name}} 2.控制语句 {% if %} {{name}} {% else %} {{name2}} {% endif%} 3.宏 {% macro check ...
- STL——空间配置器(SGI-STL)
一. 空间配置器标准接口 参见<STL源码剖析>第二章-2.1.<memory>文件. 二.具备次配置力的SGI空间配置器 1. SGI STL的配置器与众不同,也与标准规范不 ...