hdu 1542/1255 Atlantis/覆盖的面积

1542

1255

两道扫描线+线段树的入门题。
基本没有什么区别,前者是模板,后者因为是求覆盖次数至少在两次以上的,这个同样是具有并集性质的,所以把cover的判断条件更改一下就可以了qwq。

hdu1542 代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 200010
using namespace std;
int n,c,cnt;
double y[MAXN];
struct Node{double x,l,r;int cover;bool flag;
}node[MAXN];
struct Line
{double x,y_up,y_down;int flag;
}line[MAXN];
inline bool cmp(struct Line x,struct Line y){return x.x<y.x;}
inline int ls(int x){return x<<1;}
inline int rs(int x){return x<<1|1;}
inline void build(int x,int l,int r)
{node[x].l=y[l],node[x].r=y[r],node[x].x=-1,node[x].flag=false,node[x].cover=0;if(l+1==r){node[x].flag=true; return;}int mid=(l+r)>>1;build(ls(x),l,mid);build(rs(x),mid,r);
}
inline double q_update(int x,double pos,double l,double r,int flag)
{if(l>=node[x].r||r<=node[x].l) return 0;if(node[x].flag){if(node[x].cover<=0) {node[x].x=pos;node[x].cover+=flag;return 0;}double pre=node[x].x;double ans=(pos-pre)*(node[x].r-node[x].l);node[x].x=pos;node[x].cover+=flag;return ans;}return q_update(ls(x),pos,l,r,flag)+q_update(rs(x),pos,l,r,flag);
}
int main()
{scanf("%d",&n);while(n!=0){double x1,x2,y1,y2;cnt=0;for(int i=1;i<=n;i++){scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);line[++cnt].x=x1,line[cnt].y_down=y1,line[cnt].y_up=y2,line[cnt].flag=1,y[cnt]=y1;line[++cnt].x=x2,line[cnt].y_down=y1,line[cnt].y_up=y2,line[cnt].flag=-1,y[cnt]=y2;}sort(&line[1],&line[cnt+1],cmp);sort(&y[1],&y[cnt+1]);build(1,1,cnt);double ans=0;for(int i=1;i<=cnt;i++)ans+=q_update(1,line[i].x,line[i].y_down,line[i].y_up,line[i].flag);printf("Test case #%d\nTotal explored area: %.2lf\n\n",++c,ans);scanf("%d",&n);}return 0;
}

hdu1255 代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 200010
using namespace std;
int n,c,cnt,t;
double y[MAXN];
struct Node{double x,l,r;int cover;bool flag;
}node[MAXN];
struct Line
{double x,y_up,y_down;int flag;
}line[MAXN];
inline bool cmp(struct Line x,struct Line y){return x.x<y.x;}
inline int ls(int x){return x<<1;}
inline int rs(int x){return x<<1|1;}
inline void build(int x,int l,int r)
{node[x].l=y[l],node[x].r=y[r],node[x].x=-1,node[x].flag=false,node[x].cover=0;if(l+1==r){node[x].flag=true; return;}int mid=(l+r)>>1;build(ls(x),l,mid);build(rs(x),mid,r);
}
inline double q_update(int x,double pos,double l,double r,int flag)
{if(l>=node[x].r||r<=node[x].l) return 0;if(node[x].flag){if(node[x].cover<=1) {node[x].x=pos;node[x].cover+=flag;return 0;}double pre=node[x].x;double ans=(pos-pre)*(node[x].r-node[x].l);node[x].x=pos;node[x].cover+=flag;return ans;}return q_update(ls(x),pos,l,r,flag)+q_update(rs(x),pos,l,r,flag);
}
int main()
{scanf("%d",&t);while(t--){scanf("%d",&n);double x1,x2,y1,y2;cnt=0;for(int i=1;i<=n;i++){scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);line[++cnt].x=x1,line[cnt].y_down=y1,line[cnt].y_up=y2,line[cnt].flag=1,y[cnt]=y1;line[++cnt].x=x2,line[cnt].y_down=y1,line[cnt].y_up=y2,line[cnt].flag=-1,y[cnt]=y2;}sort(&line[1],&line[cnt+1],cmp);sort(&y[1],&y[cnt+1]);build(1,1,cnt);double ans=0;for(int i=1;i<=cnt;i++)ans+=q_update(1,line[i].x,line[i].y_down,line[i].y_up,line[i].flag);printf("%.2lf\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/fengxunling/p/10263273.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用了JDK自带的jconsole查看Tomcat运行情况

最近对公司的项目进行JVM调优&#xff0c;使用了JDK自带的jconsole查看Tomcat运行情况&#xff0c;记录下配置以便以后参考&#xff1a;首先&#xff0c;修改Tomcat的bin目录下的catalina.bat文件&#xff0c;在JAVA_OPTS变量中添加下面四行&#xff0c;即可set JAVA_OPTS %JAV…

jvm02

java虚拟机内存管理 每个线程就是一个顺序的执行单元&#xff0c;线程共享区即多个线程共享同一块区域&#xff0c;线程独占区即每个线程都有自己的虚拟机栈&#xff0c;本地方法栈&#xff0c;程序计数器。 程序计数器是一个比较小的内存空间&#xff0c;可以看作是当前线程所…

搭建svn管理平台

安装svn服务器&#xff1a;yum -y install subversion创建svn的目录&#xff1a;mkdir -p /data/svn初始化svn目录&#xff1a;svnadmin create /data/svnconf下的三个目录介绍&#xff1a;authz&#xff1a;控制权限,创建用户。密码在passwd创建 passwd&#xff1a;密码文件&…

Oracle dataguard 正常切换和应急切换

Oracle dataguard 正常切换和应急切换oracle dataguard提供异地容灾方案,能有效的防止单点故障和提供高可用技术,这里介绍dataguard正常主备切换和应急切换&#xff08;应急切换模拟主库出现问题无法还原,备库脱离dataguard接管主库对外提供服务&#xff09;1&#xff09;Oracl…

好程序员web前端分享JS引擎的执行机制

好程序员web前端分享JS引擎的执行机制&#xff0c;请先着重牢记两点&#xff01;JS是单线程语言。JS的EventLoop是JS的执行机制。深入了解JS的执行&#xff0c;就等于深入了解JS里的eventloop。1、灵魂三问&#xff1a;JS为什么是单线程的?为什么需要异步?单线程又是如何实现…

shutil模块、json和pickle模块

shutil模块&#xff1a; 高级的文件、文件夹、压缩包处理模块 json和pickle模块 之前学过eval内置方法可以将一个字符串转化成Python对象&#xff0c;但eval方法是有局限性的&#xff0c;对于普通的数据类型&#xff0c;json.loads、eval都可以使用&#xff0c;但遇到特殊类型的…

每日一问:LayoutParams 你知道多少?

前面的文章中着重讲解了 View 的测量流程。其中我提到了一句非常重要的话&#xff1a;**View 的测量匡高是由父控件的 MeasureSpec 和 View 自身的 LayoutParams 共同决定的。**我们在前面的 每日一问&#xff1a;谈谈对 MeasureSpec 的理解 把 MeasureSpec 的重点进行了讲解&a…

kuangbin专题十六 KMP扩展KMP HDU2594 Simpsons’ Hidden Talents

Homer: Marge, I just figured out a way to discover some of the talents we weren’t aware we had. Marge: Yeah, what is it? Homer: Take me for example. I want to find out if I have a talent in politics, OK? Marge: OK. Homer: So I take some politician’s na…

SNI: 实现多域名虚拟主机的SSL/TLS认证

为什么80%的码农都做不了架构师&#xff1f;>>> 一. 介绍 早期的SSLv2根据经典的公钥基础设施PKI(Public Key Infrastructure)设计&#xff0c;它默认认为&#xff1a;一台服务器&#xff08;或者说一个IP&#xff09;只会提供一个服务&#xff0c;所以在SSL握手时…

echo(),print(),print_r(),var_dump()的区别

echo可以一次输出多个值&#xff0c;多个值之间用逗号分隔。echo是语言结构(language construct)&#xff0c;而并不是真正的函数&#xff0c;因此不能作为表达式的一部分使用。echo是php的内部指令&#xff0c;不是函数&#xff0c;无返回值。 print()&#xff1a;函数print()…

我心目中的牛程序员、我们可以对比看看(人家还是看多年朋友面子上才肯帮忙1周,至少需支付1万元辛苦费)...

为什么80%的码农都做不了架构师&#xff1f;>>> 最近碰到客户整个网站改版的需要&#xff0c;非常短的时间里只有1周时间里&#xff0c;需要把整个B2C网站彻底的进行版面&#xff0c;我自己估算了一下&#xff0c;就是往死里干一天工作48个小时&#xff0c;1周也干…

c#做端口转发程序支持正向连接和反向链接

3389的时候 例子1&#xff1a;连接a机器的3389端口连不上&#xff0c;因为对方防火墙或者网关做了限制&#xff0c;只能访问a机器的个别端口比如80。 例子2&#xff1a;连接a机器的几乎所有端口都连不上&#xff08;对方乃内网或者防火墙网关做了限制&#xff09;&#xff0c…

Spring Boot(十四):spring boot整合shiro-登录认证和权限管理

Spring Boot(十四)&#xff1a;spring boot整合shiro-登录认证和权限管理 使用Spring Boot集成Apache Shiro。安全应该是互联网公司的一道生命线&#xff0c;几乎任何的公司都会涉及到这方面的需求。在Java领域一般有Spring Security、Apache Shiro等安全框架&#xff0c;但是由…

通用权限管理系统组件 (GPM - General Permissions Manager) 不改数据库、甚至不写代码就集成铜墙铁壁权限管理组件...

为什么80%的码农都做不了架构师&#xff1f;>>> 越成熟的东西&#xff0c;越牛X的东西&#xff0c;越简单才对&#xff0c;简单才是硬道理&#xff0c;苹果的手机只有少数几个按键&#xff0c;苹果Ipad也很少的按钮&#xff0c;甚至连苹果的笔记本键盘都少一排&…

数学符号及读法大全

数学符号及读法大全 常用数学输入符号&#xff1a; ≈ ≡ ≠ &#xff1d; ≤≥ &#xff1c; &#xff1e; ≮ ≯ ∷ &#xff0b; &#xff0d; &#xff0f; ∫ ∮ ∝ ∞ ∧ ∨ ∑ ∏ ∪ ∩ ∈ ∵ ∴ ⊥ ‖ ∠ ⌒ ≌ ∽ √ &#xff08;&#xff09; 【】&#xff5b…

在使用win 7 无线承载网络时,启动该服务时,有时会提示:组或资源的状态不是执行请求操作的正确状态。 网上有文章指出,解决这个问题的方法是在设备管理器中启动“Microsoft托管网络虚拟适配

在使用win 7 无线承载网络时&#xff0c;启动该服务时&#xff0c;有时会提示&#xff1a;组或资源的状态不是执行请求操作的正确状态。 网上有文章指出&#xff0c;解决这个问题的方法是在设备管理器中启动“Microsoft托管网络虚拟适配器”&#xff0c;见 http://jingyan.baid…

阿里一年,聊聊我成长了什么,入职阿里的职业生涯感悟

2018.5.31~2019.5.31&#xff0c;一段精彩的旅程&#xff0c;渡过了在阿里一年的时光&#xff0c;这段时光有快乐、有焦虑、有迷茫、更有思考&#xff0c;思考的是自己过去的种种不足、思考的是一些现在看来之前错误的想法、思考的是如何成为一个更好的技术人&#xff0c;将这一…

偏差-方差分解(转)

1、定义 这里所说的偏差-方差分解就是一种解释模型泛化性能的一种工具。它是对模型的期望泛化错误率进行拆解。 样本可能出现噪声&#xff0c;使得收集到的数据样本中的有的类别与实际真实类别不相符。对测试样本 x&#xff0c;另 yd 为 x 在数据集中的标记&#xff0c;y 为真实…

用过C#的朋友可能认为它是一种十分安全的语言,其实C#也可以做到经典的缓冲区溢出。 本文章将用一个实例来描述C#究竟是如何发生缓冲区溢出的! 首先建立一个C# Console工程,并开启工程的“允许

用过C#的朋友可能认为它是一种十分安全的语言&#xff0c;其实C#也可以做到经典的缓冲区溢出。 本文章将用一个实例来描述C#究竟是如何发生缓冲区溢出的&#xff01; 首先建立一个C# Console工程&#xff0c;并开启工程的“允许不安全代码”选项 键入代码&#xff1a; [csharp]…

COOKIE伪造登录网站后台

1.关于XSS&#xff08;跨站脚本攻击&#xff09;和CSRF&#xff08;跨站请求伪造&#xff09;的知识&#xff0c;xss表示Cross Site Scripting(跨站脚本攻击)&#xff0c;它与SQL注入攻击类似&#xff0c;SQL注入攻击中以SQL语句作为用户输入&#xff0c;从而达到查询/修改/删除…