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,下半 ...
随机推荐
- pip技巧(加速下载和安装)
pip技巧(linux同样) 某些开发包下载过程中会很慢,会出现timeout的情况,解决办法: 可以配置下镜像,加速下载和安装 1.python的豆瓣源地址(镜像) https://pypi.dou ...
- maven如何将本地jar安装到本地仓库
1.首先确认你的maven是否已经配置: 指令:mvn -v 2.本地的jar包位置: 3.在自己项目pom.xml中添加jar依赖: <dependency> <groupId&g ...
- WARNING: firstResult/maxResults specified with collection fetch; applying in memory!
QueryTranslatorImpl @Override public List list(SessionImplementor session, QueryParameters queryPara ...
- Linux 抓包工具:tcpdump
tcpdump 是一个抓包工具,通常用来分析网络 安装tcpdump命令 [root@mysql test]# yum install -y tcpdump -i 指定网卡 捉取网卡数据包 抓取指定网 ...
- python读、写、修改、追写excel文件
三个工具包 python操作excel的三个工具包如下 xlrd: 对excel进行读相关操作 xlwt: 对excel进行写相关操作 xlutils: 对excel读写操作的整合 注意,只能操作.x ...
- 【PCA】周志华
一.书籍
- GENIL_BOL_BROWSER 中显示的Object Name 是root object的名字
EMPLOYEE 是root object 的名字. 2: dynamic query parameters 对应于:srch_attr. Each BOL object appears in a t ...
- 网络基础之2——TCP/IP参考模型
本内容主要来源于<看透Spring MVC源码分析与实践——韩路彪>一书 BS结构网络传输的分解方式有两种: 1.OSI参考模型. 2.TCP/IP参考模型. OSI和TCP/IP分层模型 ...
- 236A
#include <stdio.h> #include <string.h> int main() { char str[150]; int arr[35]; memset(s ...
- maven配置本地仓库通用
只要在settings.xml文件中指定仓库就可以了,然后复制仓库到任何地方都可以使用,eclipse中指定一个settings.xml就可以了 仓库的位置是.locks所在目录