矩形周长(codevs 2149)
N(N<5000) 张矩形的海报,照片和其他同样形状的图片贴在墙上。它们的边都是垂直的或水平的。每个矩形可以部分或者全部覆盖其他矩形。所有的矩形组成的集合的轮廓称为周长。写一个程序计算周长。
所有矩形的顶点坐标均为整数。所有的坐标都在 [-10000,10000] 的范围内,并且任何一个矩形面积都为整数。结果的值可能需要 32 位有符号整数表示。
第1行: N,张贴在墙上的矩形的数目。
第 2..N+1行 接下来的N行中,每行都有两个点的坐标,分别是矩形的左下角坐标和右上角坐标。每一个坐标由 X 坐标和 Y 坐标组成。
只有一行,为一个非负整数,表示输入数据中所有矩形集合的轮廓长度。
7
-15 0 5 10
-5 8 20 25
15 -4 24 14
0 -6 16 4
2 15 10 22
30 10 36 20
34 0 40 16
228
/*
这道题暴力竟然可以过,可能是数据比较弱,就是把矩形拆成两条横边和纵边,然后暴力给一条边上的每一个点加权值,
如果用线段树的话,可能是用线段树维护区间和吧,貌似很麻烦的样子。
但是这个题有很多细节需要注意(扫描线的题大都有很多细节)。
为了使包含关系的边只出现一次,再加入左边时,要在区间权值为空(即以前未出现过包含这条边的边)时才更新答案,
另外在排序时如果位置相同,把左边排在前面,这是为了解决两个矩形前后重合的情况。
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define N 5010
using namespace std;
int n,cnt,f[N*];
struct node{
int l,r,h,t;
};node A[N*],B[N*];
bool cmp(const node&s1,const node&s2){
if(s1.h==s2.h) return s1.t<s2.t;
return s1.h<s2.h;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
int x1,y1,x2,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
x1+=;y1+=;x2+=;y2+=;
A[++cnt].l=x1;A[cnt].r=x2;A[cnt].h=y1;A[cnt].t=;
B[cnt].l=y1;B[cnt].r=y2;B[cnt].h=x1;B[cnt].t=;
A[++cnt].l=x1;A[cnt].r=x2;A[cnt].h=y2;A[cnt].t=;
B[cnt].l=y1;B[cnt].r=y2;B[cnt].h=x2;B[cnt].t=;
}
sort(A+,A+cnt+,cmp);sort(B+,B+cnt+,cmp);
int ans=;
for(int i=;i<=cnt;i++){
int l=A[i].l,r=A[i].r;
for(int j=l;j<r;j++){
if(A[i].t==){if(!f[j])ans++;f[j]++;}
else {f[j]--;if(!f[j])ans++;}
}
}
memset(f,,sizeof(f));
for(int i=;i<=cnt;i++){
int l=B[i].l,r=B[i].r;
for(int j=l;j<r;j++){
if(B[i].t==){if(!f[j])ans++;f[j]++;}
else {f[j]--;if(!f[j])ans++;}
}
}
printf("%d",ans);
return ;
}
矩形周长(codevs 2149)的更多相关文章
- 25.按要求编写一个Java应用程序: (1)编写一个矩形类Rect,包含: 两个属性:矩形的宽width;矩形的高height。 两个构造方法: 1.一个带有两个参数的构造方法,用于将width和height属性初化; 2.一个不带参数的构造方法,将矩形初始化为宽和高都为10。 两个方法: 求矩形面积的方法area() 求矩形周长的方法perimeter() (2)通过继承Rect类编写一个具有
		
package zhongqiuzuoye; //自己写的方法 public class Rect { public double width; public double height; Rect( ...
 - HDU 1828 / POJ 1177 Picture --线段树求矩形周长并
		
题意:给n个矩形,求矩形周长并 解法:跟求矩形面积并差不多,不过线段树节点记录的为: len: 此区间线段长度 cover: 此区间是否被整个覆盖 lmark,rmark: 此区间左右端点是否被覆盖 ...
 - HDU 1828 扫描线(矩形周长并)
		
Picture Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
 - HDU 6362(求椭圆中矩形周长的期望 数学)
		
题意是给定一个椭圆标准方程的a,b(椭圆的长半轴长和短半轴长),在[0,b]内取一个数,则过点(0,b)且平行于x轴的直线与椭圆交于两点,再将此两点关于x轴做对称点,顺次连接此四点构成矩形,求出这些矩 ...
 - hdu 1828 Picture(线段树扫描线矩形周长并)
		
线段树扫描线矩形周长并 #include <iostream> #include <cstdio> #include <algorithm> #include &l ...
 - 51nod 1206 Picture 矩形周长求并 | 线段树 扫描线
		
51nod 1206 Picture 矩形周长求并 | 线段树 扫描线 #include <cstdio> #include <cmath> #include <cstr ...
 - P1856 [USACO5.5]矩形周长Picture
		
P1856 [USACO5.5]矩形周长Picture $len$ $sum$ $num$ $flag\_l$ $flage\_ ...
 - P1856 [USACO5.5]矩形周长Picture[扫描线]
		
题目背景 墙上贴着许多形状相同的海报.照片.它们的边都是水平和垂直的.每个矩形图片可能部分或全部的覆盖了其他图片.所有矩形合并后的边长称为周长. 题目描述 编写一个程序计算周长. 如图1所示7个矩形. ...
 - POJ 1177 矩形周长并 模板
		
Picture 题目链接 http://poj.org/problem?id=1177 Description A number of rectangular posters, photographs ...
 - 扫描线矩形周长的并 POJ1177
		
//扫描线矩形周长的并 POJ1177 // 我是按x轴 #include <iostream> #include <cstdio> #include <cstdlib& ...
 
随机推荐
- 2019/05/11    JAVA虚拟机原理堆、栈、方法区概念区别
			
Java堆 堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对 ...
 - Entity Framework + MySQL 使用笔记
			
添加: using (var edm = new NorthwindEntities()) { Customers c = ", Region = "天府广场", Con ...
 - Codeforces GYM 100741A . Queries
			
time limit per test 0.25 seconds memory limit per test 64 megabytes input standard input output stan ...
 - Codeforces Gym 2015 ACM Arabella Collegiate Programming Contest(二月十日训练赛)
			
A(By talker): 题意分析:以a(int) op b(int)形式给出两个整数和操作符, 求两个整数是否存在操作符所给定的关系 ,有则输出true,无则输出false: 思路:由于无时间复杂 ...
 - c++ extern
			
一.extern关键字的作用 文件中定义的全局变量的可见性扩展到整个程序是在链接完成之后,而在编译阶段,他们的可见性仍局限于各自的文件. 编译器的目光不够长远,编译器没有能够意识到,某个变量符号虽然不 ...
 - JavaSE-25 AWT
			
学习要点 关于AWT AWT容器 布局管理器 AWT组件 事件处理 关于AWT java.awt包与子包 AWT软件包 说明 import java.awt.*; 基本组件使用工具 import ...
 - TWaver可视化编辑器的前世今生(三)Doodle编辑器
			
插播一则广告(长期有效)TWaver需要在武汉招JavaScript工程师若干要求:对前端技术(JavasScript.HTML.CSS),对可视化技术(Canvas.WebGL)有浓厚的兴趣基础不好 ...
 - Spring框架 (log4j :WARN No appenders could be found for logger log4j:WARN Please initialize the log4j system properly.)问题解决
			
Spring框架需要的jar包 1.Spring压缩包中的四个核心JAR包 beans .context.core 和expression 下载地址: https://pan.baidu.com/s/ ...
 - STL源码分析-iterator(迭代器)
			
1. GOF 迭代器设计模式 前面一篇文章有写到stl_list的实现,也实现了一下相应的iterator,但是后面觉得,实现具体容器之前有必要介绍一下iterator(迭代器) .那么迭代器是什么呢 ...
 - MariaDB数据库(二)
			
1. MariaDB数据类型 MariaDB数据类型可以分为数字,日期和时间以及字符串值. 使用数据类型的原则:够用就行,尽量使用范围小的,而不用大的. 1.1 常用的数据类型 整数:int,bit ...