hdu3511 圆的扫描线
http://blog.csdn.net/firenet1/article/details/47041145
#include <iostream>
#include <algorithm>
#include <string.h>
#include <cmath>
#include <cstdio>
#include <set>
using namespace std;
const int maxn=;
struct Circle
{
int id,x,y,r;
Circle(int cid=,int cx=,int cy=,int cr=)
{
id=cid; x=cx; y=cy; r=cr;
}
}cir[maxn],P[maxn]; bool cmp(Circle a, Circle b)
{
return a.x<b.x;
}
int globalx;
struct point{
int id,ty;
point(int cid=, int cty=){
id=cid;
ty=cty;
}
};
double yposition(int id, int ty)
{
double x=globalx-cir[id].x;
double y=sqrt(1.0*cir[id].r*cir[id].r-x*x);
if(ty==)return cir[id].y+y;
return cir[id].y-y;
}
bool operator <(point a, point b)
{
if(a.id==b.id)return a.ty>b.ty;
return yposition(a.id,a.ty)>yposition(b.id,b.ty);
}
bool operator == (point a, point b)
{
return a.id==b.id&&a.ty==b.ty;
} set<point>Q;
int dep[maxn];
int main()
{
int n;
while(scanf("%d",&n)==)
{
Q.clear();
int cnt=;
for(int i=; i<n; i++)
{
scanf("%d%d%d",&cir[i].x,&cir[i].y, &cir[i].r);
cir[i].id=i;
P[cnt++]=Circle(i,cir[i].x-cir[i].r,);
P[cnt++]=Circle(i,cir[i].x+cir[i].r,);
}
sort(P,P+cnt,cmp);
memset(dep,,sizeof(dep));
set<point>:: iterator it1,it2;
int ans=;
for(int i=; i<cnt; i++)
{
globalx=P[i].x;
if(P[i].y==)
{
Q.erase(point(P[i].id,));
Q.erase(point(P[i].id,));
}else
{
it1=Q.insert(point(P[i].id,)).first;
it2=it1;
it1++;
if(it1==Q.end()||it2==Q.begin()){
dep[ P[i].id] =;
}else
{
it2--;
if(it1->id==it2->id){
dep[P[i].id]=dep[it1->id]+;
}else
{
dep[P[i].id]=max(dep[it1->id],dep[it2->id]);
}
} Q.insert(point(P[i].id,)); }
ans=max(dep[P[i].id],ans);
}
printf("%d\n",ans);
}
return ;
}
hdu3511 圆的扫描线的更多相关文章
- hdu3511 Prison Break 圆的扫描线
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=3511 题目: Prison Break Time Limit: 10000/5000 MS ( ...
- HDU5299 圆的扫描线 && 树上删边博弈
HDU5299 圆的扫描线 && 树上删边博弈 标签(空格分隔): 未分类 给出若干个圆,可以互相嵌套但不相交或相切. 每次删去一个圆和它内部的圆,进行博弈,问谁赢. 分成两部分.首先 ...
- bzoj4561: [JLoi2016]圆的异或并 圆的扫描线
地址:http://www.lydsy.com/JudgeOnline/problem.php?id=4561 题目: 4561: [JLoi2016]圆的异或并 Time Limit: 30 Sec ...
- POJ - 1981 :Circle and Points (圆的扫描线) hihocoder1508
题意:给定N个点,然后给定一个半径为R的圆,问这个圆最多覆盖多少个点. 思路:在圆弧上求扫描线. 如果N比较小,不难想到N^3的算法. 一般这种覆盖问题你可以假设有两个点在圆的边界上,那么每次产生的圆 ...
- 【LOJ2586】【APIO2018】选圆圈 CDQ分治 扫描线 平衡树
题目描述 在平面上,有 \(n\) 个圆,记为 \(c_1,c_2,\ldots,c_n\) .我们尝试对这些圆运行这个算法: 找到这些圆中半径最大的.如果有多个半径最大的圆,选择编号最小的.记为 \ ...
- 计算几何值平面扫面poj2932 Coneology
Coneology Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4097 Accepted: 859 Descript ...
- Coneology(POJ 2932)
原题如下: Coneology Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4937 Accepted: 1086 D ...
- 【APIO2018】选圆圈(平面分块 | CDQ分治 | KDT)
Description 给定平面上的 \(n\) 个圆,用三个参数 \((x, y, R)\) 表示圆心坐标和半径. 每次选取最大的一个尚未被删除的圆删除,并同时删除所有与其相切或相交的圆. 最后输出 ...
- 洛谷P3268 [JLOI2016]圆的异或并(扫描线)
扫描线还不是很熟啊--不管是从想的方面还是代码实现的方面-- 关于这题,考虑一条平行于\(y\)轴的扫描线从左到右扫描每一个圆,因为只有相离和内含两种关系,只用在切线处扫描即可 我们设上半圆为1,下半 ...
随机推荐
- 2018/09/17《涂抹MySQL》【性能优化及诊断】学习笔记(七)
读 第十三章<MySQL的性能优化与诊断> 总结 一说性能优化,整个人都像被打了鸡血一样
- navicat连接oracle失败
正常是成功的,失败的话,就是oci.dll的问题 在这边下载: https://www.oracle.com/technetwork/topics/winsoft-085727.html 然后找到对应 ...
- 运行vs2010,Debug时发生“无法启动程序"http://localhost:xxx",系统找不到指定文件
网上参考回答:应该是Visual Studio不能启动浏览器导致的结果!第一种结果是没有设置默认的浏览器,第二种情况是注册表被修改了! 我的尝试: 1.在启动处点击下三角,选择“使用以下浏览器浏览” ...
- phpstudy + dvws
下载apache+mysql+php 的服务组件 phpstudy phpstudy 下载地址 https://www.baidu.com/link?url=EN5Br6PK-Gboaf905Jjt0 ...
- 27-5-LTDC控制LCD显示屏
1.显示原理 (1).液晶显示是分2层显示的,配置层级结构体参数再将数据输出到混合器合成,显示再液晶上. (2).LTDC初始化结构体 控制 LTDC 涉及到非常多的寄存器,利用 LTDC 初始化结构 ...
- django基础-01:软件框架,MVC框架,MVT
1. 软件框架 一个公司是由公司中的各部部门来组成的,每一个部门拥有特定的职能,部门与部门之间通过相互的配合来完成让公司运转起来. 一个软件框架是由其中各个软件模块组成的,每一个模块都有特定的功能,模 ...
- linux网络设置和虚拟机克隆转移之后网卡找不到
linux网络设置和虚拟机克隆转移之后Error:No suitable device found:no device found for connection 'System eth0'问题解决 ...
- centos7 管理开机启动:systemd
一.CentOS7 systemd 介绍 在 CentOS7 中,使用 systemd 来管理其他服务是否开机启动,systemctl 是 systemd 服务的命令行工具 [root@mysql ~ ...
- json传参 js前端和java后端 的简单例子
下面讲解了从前端js对象-->json字符串-->java字符串---->java map的过程 1,初始化js对象 var param = {}; param.krel = kre ...
- select默认选择后台转过来的option选项
<select> <option value="#" >--请选择--</option> <option value="1&qu ...