Luogu P1856 [USACO5.5]矩形周长Picture】的更多相关文章

Code: #include<bits/stdc++.h> #define maxn 200007 #define inf 100005 using namespace std; void setIO(string s) { string in=s+".in"; freopen(in.c_str(),"r",stdin); } struct Edge { int l,r,h,flag; }edges[maxn]; int n; namespace tr…
线段树+扫描线 经典的扫描线问题 首先将一个矩形看作由竖着的两条边和横着的两条边构成 那分成两次考虑,一次考虑竖边,一次考虑横边 首先考虑横边 如图两个矩形,现将横边擦去,留下竖边,将平面划分成3个区域 在代码实现时,可以从左到右记录端点 那么现在想象一条平行于横边的扫描线不断从下往上扫 当扫到一个矩形的下边,将这条矩形的下边包含的区间覆盖 当扫到一个矩形的上边,将这条矩形的上边包含的区间去除覆盖 那么对于这些被竖线划分的区域,建立一棵线段树维护这些区间是否被覆盖 如最底下的矩形下边,覆盖区间2…
P1856 [USACO5.5]矩形周长Picture $len$            $sum$              $num$             $flag\_l$ $flage\_r$分别表示该区间 覆盖长度--整体覆盖次数--覆盖段数--左右端点是否覆盖 将上下边按高度排序不断扫下来 $num$是用来处理高度的 inline void Update(LL now,LL l,LL r){ if(tree[now].sum){ tree[now].num=1, tree[now…
题目背景 墙上贴着许多形状相同的海报.照片.它们的边都是水平和垂直的.每个矩形图片可能部分或全部的覆盖了其他图片.所有矩形合并后的边长称为周长. 题目描述 编写一个程序计算周长. 如图1所示7个矩形. 如图2所示,所有矩形的边界.所有矩形顶点的坐标都是整数. 解析 首先想到模拟,这题数据小,直接暴力扫转折点,统计周长的增量就得了. 其实最优解就是这么做的. TAG里有扫描线,咱就用扫描线吧. 简单来说,还是扫描线同样的思路,做线段覆盖(具体实现可以百度,我懒得写了).入边权值为+1,出边权值为-…
题目背景 墙上贴着许多形状相同的海报.照片.它们的边都是水平和垂直的.每个矩形图片可能部分或全部的覆盖了其他图片.所有矩形合并后的边长称为周长. 题目描述 编写一个程序计算周长. 如图1所示7个矩形. 如图2所示,所有矩形的边界.所有矩形顶点的坐标都是整数. 输入输出格式 输入格式: 输入文件的第一行是一个整数N(0<=N<5000),表示有多少个矩形.接下来N行给出了每一个矩形左下角坐标和右上角坐标(所有坐标的数值范围都在-10000到10000之间). 输出格式: 输出文件只有一个正整数,…
Loli 考试的题目之一 题目地址 \(N^2\)做法 #include <cstdio> #include <cstring> #define re register #define GC getchar() #define Clean(X,K) memset(X,K,sizeof(X)) #include <iostream> #define LS (RT*2) #define RS (RT*2+1) #include <algorithm> #defi…
https://www.luogu.org/problemnew/show/P1856 1.每个矩形由两条横向边和两条纵向边组成. 2.对于横向边,按纵坐标排序.设当前讨论的边为 A [s , t] 如果 A 是某个矩形的靠下的边,在树中查询[s,t]区间中被覆盖的长度为x,那么加上这条边后将增加(t-s-x); 如果 A 是某个矩形的靠上的边,先删除它的对应边,再在树中查询[s,t]区间中被覆盖的长度为x,那么加上这条边后将增加(t-s-x); 3.对于纵向边,按横坐标排序,讨论方法与横向边相…
看到一坨矩形就要想到扫描线.(poj atantis) 我们把横边竖边分开计算,因为横边竖边其实没有区别,以下论述全为考虑竖边的. 怎样统计一个竖边对答案的贡献呢?答:把这个竖边加入线段树,当前的总覆盖长度 减去 加入前的总覆盖长度 的绝对值 即为这个竖边的贡献. 这样做有一个要求,横坐标相同的竖边,要先加进去入边再删掉出边.(为什么呢?考虑两个矩形,一个矩形的右边和另一个矩形的左边的横坐标相同但上下错落) #include <algorithm> #include <iostream&…
对于横轴,加上与上一次扫描的差值:对于竖轴,加上高度差与区间内不相交线段\(*2\)的积: 难点在pushdown,注意维护覆盖关系.再就注意负数 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a = (b); a <= (c);…
题目描述 墙上贴着许多形状相同的海报.照片.它们的边都是水平和垂直的.每个矩形图片可能部分或全部的覆盖了其他图片.所有矩形合并后的边长称为周长. 编写一个程序计算周长. 如图1所示7个矩形. 如图2所示,所有矩形的边界.所有矩形顶点的坐标都是整数. 输入输出格式 输入格式: 输入文件的第一行是一个整数\(N(0<=N<5000)\),表示有多少个矩形.接下来\(N\)行给出了每一个矩形左下角坐标和右上角坐标(所有坐标的数值范围都在\(-10000\)到\(10000\)之间). 输出格式: 输…
51nod 1206 Picture 矩形周长求并 | 线段树 扫描线 #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <iostream> using namespace std; typedef long long ll; #define INF 0x3f3f3f3f #define space putchar(' ') #…
题意:给n个矩形,求矩形周长并 解法:跟求矩形面积并差不多,不过线段树节点记录的为: len: 此区间线段长度 cover: 此区间是否被整个覆盖 lmark,rmark: 此区间左右端点是否被覆盖 num: 此区间分离开的线段的条数 重点在转移的地方,不难理解. 代码: #include <iostream> #include <cmath> #include <iostream> #include <cstdio> #include <cstrin…
线段树扫描线矩形周长并 #include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #define MAXN 22222 using namespace std; int len[MAXN<<2]; bool lbd[MAXN<<2],rbd[MAXN<<2]; int numseg[MAXN<<2]; int cnt[…
传送门 •参考资料 [1]:算法总结:[线段树+扫描线]&矩形覆盖求面积/周长问题(HDU 1542/HDU 1828) •题意 给你 n 个矩形,求矩形并的周长: •题解1(两次扫描线) 周长可以分成两部分计算,横线和竖线: 如何求解横线的所有并的长度呢? 和求矩阵面积并的做法一样,先将 x 离散化: 每次更新的时候,记录一下上次更新后的横线总长度: ans += [现在这次总区间被覆盖的长度和上一次总区间被覆盖的长度之差的绝对值]; 求解竖线的所有并的长度何求解横线的长度相同: 需要注意的是…
看这篇博客前可以看一下扫描线求面积:线段树扫描线(一.Atlantis HDU - 1542(覆盖面积) 二.覆盖的面积 HDU - 1255(重叠两次的面积))  解法一·:两次扫描线 如图我们可以先用扫描线找出来横线的周长和,再用扫描线找纵线周长和 这里以横线来举例: 横线的长度 = [现在这次总区间被覆盖的程度和上一次总区间被覆盖的长度之差的绝对值] 下面有一点要注意的(参考链接:https://www.cnblogs.com/violet-acmer/p/11461660.html) 需…
Picture Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3310    Accepted Submission(s): 1723 Problem Description A number of rectangular posters, photographs and other pictures of the same shape…
Picture 题目链接 http://poj.org/problem?id=1177 Description A number of rectangular posters, photographs and other pictures of the same shape are pasted on a wall. Their sides are all vertical or horizontal. Each rectangle can be partially or totally cov…
package zhongqiuzuoye; //自己写的方法 public class Rect { public double width; public double height; Rect(double width,double height) //带有两个参数的构造方法,用于将width和height属性初化; { this.width=width; this.height=height; } Rect() //不带参数的构造方法,将矩形初始化为宽和高都为10. { width=10…
题意是给定一个椭圆标准方程的a,b(椭圆的长半轴长和短半轴长),在[0,b]内取一个数,则过点(0,b)且平行于x轴的直线与椭圆交于两点,再将此两点关于x轴做对称点,顺次连接此四点构成矩形,求出这些矩形周长的期望. 一开始的时候,想到所有矩形的周长和积分就是椭圆面积的两倍,但矩形的个数应该是 a + b,可是与样例不符......又尝试了矩形个数为a,b,π/2,均不对.再次读题,发现矩形的选择是在[0,b]中选的,那么矩形的个数就应该是b个. 依照题意,用积分的方法做,可得: 积分后得:a*b…
//扫描线矩形周长的并 POJ1177 // 我是按x轴 #include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <vector> #include <cmath> #include <cstring> // #include <memory.h> // #include <bits/st…
题面 传送门:https://www.luogu.org/problemnew/show/P1345 ] Solution 这道题,需要一个小技巧了解决. 我相信很多像我这样接蒟蒻,看到这道题,不禁兴奋起来:"这道题是裸的割边,我会做!!!" 然后兴冲冲的打了个DINIC,交一发,80分. 所以说我们有时候还是太naive. 重新读题,会发现这题割的不是边,是点.这样还能80分,数据真水 所以说,我们需要一个割边转割点的小技巧. 我们可以考虑"拆点",即把一个点拆成…
题目链接 题意:给出n个矩形,每个矩形给左下 和 右上的坐标,求围成的周长的长度. 分析: 首先感谢大神的博客,最近做题经常看大神的博客:http://www.cnblogs.com/kuangbin/ 沿x轴离散化.和之前的矩阵面积并有点像. 但是一定要去重,否则会错 #include <iostream> #include <cstdio> #include <vector> #include <cstring> #include <cstdlib…
题目链接 题意 给出n个矩形,求周长并. 思路 学了区间并,比较容易想到周长并. 我是对x方向和y方向分别做两次扫描线.应该记录一个pre变量,记录上一次扫描的时候的长度,对于每次遇到扫描线统计答案的时候,使用当前的 tree[1] 去与 pre 做相减,因为这一次如果边长增加了或者减少了,那么一定和之前的值有差值,其中的差值就是这次的变化量. 但是这份代码交G++会WA,C++就A了.而且排序的时候如果权值相同,应该让状态为1(开始)的扫描线排在状态为-1(结束)的扫描线前面,因为重合的话,那…
地址:http://poj.org/problem?id=1177 题目: Picture Time Limit: 2000MS   Memory Limit: 10000K Total Submissions: 12905   Accepted: 6817 Description A number of rectangular posters, photographs and other pictures of the same shape are pasted on a wall. Thei…
哇!这小破题坑了我好久. 扫描线+线段树 这题数据范围小,没离散化.真要离散化我还搞不好呢. 具体的看这个博客吧. 主要是这个坑爹的c,len把我搞了,其他的还好. 代码: #include <cstdio> #include <queue> #include <cmath> using namespace std; struct Node { int len,s; } node[]; struct Edge { int L,R,high,flag; bool oper…
运用PHP面向对象的知识设计一个图形计算器,同时也运用到了抽象类知识,这个计算器可以计算三角形的周长和面积以及矩形的周长和面积.本图形计算器有4个页面:1.PHP图形计算器主页index.php;    2.形状的抽象类shape.class.php;    3三角形计算类triangle.class.php;    4.矩形计算类rect.class.php. PHP图形计算器代码点击下载:   php图形计算器.zip 代码分别如下: PHP图形计算器主页: 1 2 3 4 5 6 7 8…
题意如图 题解:这题非常类似与矩形面积并,也是维护一个被覆盖了一次以上的线段总长. 但是周长要算新出现的,所以每次都要和上一次做差求绝对值. x轴做一遍,y轴做一遍. 但是有个问题:矩形边界重合的时候的处理.举个例子,在处理x轴的时候: 怎么处理呢?我们在对y排序的时候把下边界(下边界+1,上边界-1)排在上边界前面,这样做就不会重复算了. #include<cstdio> #include<cstdlib> #include<cstring> #include<…
题目描述 Description N(N<5000) 张矩形的海报,照片和其他同样形状的图片贴在墙上.它们的边都是垂直的或水平的.每个矩形可以部分或者全部覆盖其他矩形.所有的矩形组成的集合的轮廓称为周长.写一个程序计算周长. 所有矩形的顶点坐标均为整数.所有的坐标都在 [-10000,10000] 的范围内,并且任何一个矩形面积都为整数.结果的值可能需要 32 位有符号整数表示. 输入描述 Input Description 第1行: N,张贴在墙上的矩形的数目. 第 2..N+1行 接下来的N…
题意:给你n个矩形,然后矩形有可能重叠,要你求周长 思路:首先碰到这种矩形在数轴上那么第一反应应该想到的是扫描线, 做周长我们有两种方法 第一种,我们可以分开两部分求,第一遍求x轴上的贡献,第二遍求y轴上的贡献 首先第一条边我们可以直接加出贡献,第二条边我们和第一条有覆盖部分,那么我们要怎么加呢,我们会发现要加的也就是  ( 加入这条边后的线段树上最大长度-没加之前的最大长度) 然后我们再加进来,会看到加入出边的时候因为是-1了,所以加入后的长度会比没加之前的值小,但是贡献依然是他们的差值,那么…