POJ 3168 Barn Expansion (几何基础)
【题目链接】 http://poj.org/problem?id=3168
【题目大意】
给出一些矩形,没有相交和包含的情况,只有相切的情况
问有多少个矩形没有相切或者边角重叠
【题解】
我们将所有的与x轴平行的线段和与y周平行的线段分开处理,判断是否出现重合
对重合的两个矩形进行标识,最后没有被标识过的矩形数目就是答案。
【代码】
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=30010;
struct data{
int id,d,x,y;
data(){};
data(int _d,int _x,int _y,int _id):d(_d),x(_x),y(_y),id(_id){}
};
vector<data> sx,sy;
bool vis[N];
bool cmp(data a,data b){
if(a.d!=b.d)return a.d<b.d;
if(a.x!=b.x)return a.x<b.x;
return a.y<b.y;
}
int n,a,b,c,d;
void solve(){
sx.clear();sy.clear();
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++){
scanf("%d%d%d%d",&a,&b,&c,&d);
sy.push_back(data(b,a,c,i));
sy.push_back(data(d,a,c,i));
sx.push_back(data(a,b,d,i));
sx.push_back(data(c,b,d,i));
}sort(sx.begin(),sx.end(),cmp);
sort(sy.begin(),sy.end(),cmp);
int t=sy[0].y;
for(int i=1;i<sy.size();i++){
if(sy[i-1].d==sy[i].d){
if(t>=sy[i].x){
vis[sy[i].id]=vis[sy[i-1].id]=1;
}
}else t=sy[i].y;
t=max(sy[i].y,t);
}t=sx[0].y;
for(int i=1;i<sx.size();i++){
if(sx[i-1].d==sx[i].d){
if(t>=sx[i].x){
vis[sx[i].id]=vis[sx[i-1].id]=1;
}
}else t=sx[i].y;
t=max(sx[i].y,t);
}int ans=0;
for(int i=0;i<n;i++)if(!vis[i])ans++;
printf("%d\n",ans);
}
int main(){
while(~scanf("%d",&n))solve();
return 0;
}
POJ 3168 Barn Expansion (几何基础)的更多相关文章
- POJ 3168 Barn Expansion (几何+排序)
题目链接:id=3168">POJ 3168 Barn Expansion 题意:抽象出来就是给出n个矩形的坐标是(左下角和右上角的坐标,矩形的边都是平行x,y轴),问有几个矩形和其它 ...
- 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
Barn Expansion Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2465 Accepted: 666 Des ...
- poj3168 Barn Expansion【计算几何 平面扫描】
Farmer John has N (1 <= N <= 25,000) rectangular barns on his farm, all with sides parallel to ...
- POJ 2318 - TOYS - [计算几何基础题]
题目链接:http://poj.org/problem?id=2318 Time Limit: 2000MS Memory Limit: 65536K Description Calculate th ...
- poj 1039 Pipe(几何基础)
Pipe Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9932 Accepted: 3045 Description ...
- B - Toy Storage(POJ - 2398) 计算几何基础题,比TOYS多了个线段排序
Mom and dad have a problem: their child, Reza, never puts his toys away when he is finished playing ...
- POJ 3168 排序+扫描
题意: 思路: 我们可以把每个矩形拆成四条线 与x轴平行的放在一起 与y轴平行的放在一起 排个序 判一判有没有交 有交 则说明不可扩张 统计一下 就可以了 处理的姿势很重要 姿势不对毁一生 //By ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
随机推荐
- wyh的物品~(二分)
链接:https://www.nowcoder.com/acm/contest/93/I来源:牛客网 题目描述 wyh学长现在手里有n个物品,这n个物品的重量和价值都告诉你,然后现在让你从中选取k个, ...
- 在xml文件中引入带有@Configuration的Java类
在xml引入带有@Configuration的Java类,就是把这个带有@Configuration的Java类,当做一个普通的的类用<bean>标签引入: 核心代码如下: @Config ...
- jquery教程-Jquery 获取标签个数 size()函数用法
jquery教程-Jquery 获取标签个数 size()函数用法,size() 方法返回被 jQuery 选择器匹配的元素的数量. 语法 $(selector).size() jQuery ...
- Oop分析方法
为了实现Oop,这个我已经在一个前端的js项目中实现了Oop,过后总结:对于js这种动态语言,可以在运行时动态组件对象的属性和方法这种,解释型的语言来讲,真的是OOP,如果不存在关系数据库,仅仅是从后 ...
- 谈谈openstack部署规模问题
理论上,单个openstack已设计成可水平扩展的系统,只要数据库足够快,消息总线足够多资源等,一个openstack系统可管理上千台物理服务器是没有问题的. 但是单个openstack规模大了之后, ...
- Educational Codeforces Round 41 A B C D E
A. Tetris 题意 俄罗斯方块,问能得多少分. 思路 即求最小值 Code #include <bits/stdc++.h> #define F(i, a, b) for (int ...
- word2vec 理论与实践
导读 本文简单的介绍了Google 于 2013 年开源推出的一个用于获取 word vector 的工具包(word2vec),并且简单的介绍了其中的两个训练模型(Skip-gram,CBOW),以 ...
- 生成器版本的文件MD5校验
生成器是一个可迭代的对象,可以对可迭代的对象进行便利,比如字符串.列表等,都是可迭代对象 def f(n): for i in range(n): yield i 特点: 1.当调用这个函数的 ...
- python基础===socket模块的讲解(转)
一.网络知识的一些介绍 socket 是网络连接端点.例如当你的Web浏览器请求www.jb51.net上的主页时,你的Web浏览器创建一个socket并命令它去连接 www.jb51.net的Web ...
- Mysql中大表添加索引的办法
Hash索引与 Btree索引的区别http://database.51cto.com/art/201010/229525.htm Creating Indexes/Sorting on very l ...