HDU 3511 圆扫描线
找最深的圆,输出层数
类似POJ 2932的做法 圆扫描线即可。这里要记录各个圆的层数,所以多加一个维护编号的就行了。
/** @Date : 2017-10-18 18:16:52
* @FileName: HDU 3511 圆扫描线.cpp
* @Platform: Windows
* @Author : Lweleth (SoungEarlf@gmail.com)
* @Link : https://github.com/
* @Version : $Id$
*/
#include <bits/stdc++.h>
#define LL long long
#define PII pair<int ,int>
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std; const int INF = 0x3f3f3f3f;
const int N = 1e5+20;
const double eps = 1e-8; struct yuu
{
double x, y, r;
yuu(){}
yuu(double _x, double _y, double _r):x(_x), y(_y), r(_r){}
};
yuu a[N];
double scanx; struct cir
{
int m;
int flag;
cir(){}
cir(int _m, int _f):m(_m), flag(_f){}
bool operator <(const cir &b) const{
double dis1 = sqrt(a[m].r * a[m].r - (scanx - a[m].x) * (scanx - a[m].x));
double dis2 = sqrt(a[b.m].r * a[b.m].r - (scanx - a[b.m].x) * (scanx - a[b.m].x));
double y1 = a[m].y + dis1 * flag;
double y2 = a[b.m].y + dis2 * b.flag;
return y1 < y2|| (fabs(y1 - y2) < eps && flag < b.flag);
}
}; pair<double ,int> p[N*2]; int ans[N]; int main()
{
int n;
while(cin >> n)
{
MMF(ans);
for(int i = 0; i < n; i++)
{
double x, y, r;
scanf("%lf%lf%lf", &x, &y, &r);
a[i] = yuu(x, y, r);
p[i*2] = MP(x - r, i);
p[i*2 + 1] = MP(x + r, i + n);
}
sort(p, p + 2 * n);
set<cir>st;//按交点高度维护圆集合
int ma = 0;
for(int i = 0; i < 2 * n; i++)
{
scanx = p[i].fi;
if(p[i].se < n)
{
int up = -1, dw = -1;
st.insert(cir(p[i].se, -1));
auto pos = st.lower_bound(cir(p[i].se, -1));
if((++pos) != st.end())
up = (pos)->m;
if((--pos) != st.begin())
dw = (--pos)->m;
if(up == dw && ~up)
ans[p[i].se] = ans[up] + 1;
else if(~up && ~dw)
ans[p[i].se] = max(ans[up], ans[dw]);
else ans[p[i].se] = 1;
//cout << up << dw << endl;
st.insert(cir(p[i].se, 1));
ma = max(ma, ans[p[i].se]);
}
else
{
st.erase(cir(p[i].se%n, 1));
st.erase(cir(p[i].se%n, -1));
}
}
printf("%d\n", ma);
}
return 0;
}
HDU 3511 圆扫描线的更多相关文章
- POJ 2932 圆扫描线
求n个圆中没有被包含的圆.模仿扫描线从左往右扫,到左边界此时如有3个交点,则有3种情况,以此判定该圆是否被离它最近的圆包含,而交点和最近的圆可以用以y高度排序的Set来维护.因此每次到左边界插入该圆, ...
- (中等) HDU 3265 Posters , 扫描线。
Problem Description Ted has a new house with a huge window. In this big summer, Ted decides to decor ...
- hdu 3255 Farming(扫描线)
题目链接:hdu 3255 Farming 题目大意:给定N个矩形,M个植物,然后给定每一个植物的权值pi,pi表示种植物i的土地,单位面积能够收获pi,每一个矩形给定左下角和右上角点的坐标,以及s, ...
- POJ 3549 GSM phone(圆+扫描线+最短路)
题目意思是求起点s到终点s的最短路,但是只能在圆的内部和边上走.一种可以想到的方法就是求出所有的交点,然后两两连边并验证合法性,但是这样的交点数规模有n2. 我们可以观察发现,我们在圆求并构成的图形中 ...
- POJ2932 Coneology【圆扫描线】
POJ2932 Coneology 题意: 给出一些不相交的圆,问有多少个圆不被其他圆包围 题解: 扫描线,把所有圆的左边界和右边界放到\(vector\)里排序,遍历到圆左边界的时候判断是否满足条件 ...
- Atlantis HDU - 1542 (扫描线,线段树)
扫描线的模板题,先把信息接收,然后排序,记录下上边和下边,然后用一条虚拟的线从下往上扫.如果我扫到的是下边,那么久用线段树在这个区间内加上1,表示这个区间现在是有的,等我扫描到上边的时候在加上-1,把 ...
- 覆盖的面积 HDU - 1255(扫描线求面积交)
题意: 就是扫描线求面积交 解析: 参考求面积并.... 就是把down的判断条件改了一下..由w > 0 改为 w > 1 同时要讨论一下 == 1 时 的情况, 所以就要用到一个临时 ...
- hdu 3264 圆的交+二分
Open-air shopping malls Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- POJ 1151 HDU 1542 Atlantis(扫描线)
题目大意就是:去一个地方探险,然后给你一些地图描写叙述这个地方,每一个描写叙述是一个矩形的右下角和左上角.地图有些地方是重叠的.所以让你求出被描写叙述的地方的总面积. 扫描线的第一道题,想了又想,啸爷 ...
随机推荐
- 《Effective Java》学习笔记 —— 通用程序设计
本章主要讨论局部变量.控制结构.类库.反射.本地方法的用法及代码优化和命名惯例. 第45条 将局部变量的作用域最小化 * 在第一次使用的它的地方声明局部变量(就近原则). * 几乎每个局部变量的声明都 ...
- redis安装启动和数据操作
redis安装和启动 1.安装包下载地址 >> redis基本数据类型 string(字符串和数值) .list(列表/队列).hashmap(哈希表[键唯一]). set(集合[值唯一] ...
- linux centos 中Tomcat的安装和自启动配置
Tomcat的安装和自启动配置将tomcat添加为linux系统服务,网上找到了很多方法,其中比较简单的如下:方法一:(亲测有效)1. 首先需要将$Tomcat_HOME/bin目录下的catalin ...
- Go语言简单学习
GO 支持goroutine 和通道,并且推荐使用消息而不是共享内存来进行并发编程,总体来说,Go语言是一个非常现代化的语言,精小但非常强大 Go语言的主要特性: 1.自动垃圾回收 2.更丰富的内置类 ...
- 基于tensorflow2.0 使用tf.keras实现Fashion MNIST
本次使用的是2.0测试版,正式版估计会很快就上线了 tf2好像更新了蛮多东西 虽然教程不多 还是找了个试试 的确简单不少,但是还是比较喜欢现在这种写法 老样子先导入库 import tensorflo ...
- Java实验报告(实验五)
课程:Java程序设计 班级:1351 姓名:王玮怡 学号:20135116 成绩: 指导教师: ...
- “数学口袋精灵”第二个Sprint计划---第一天
“数学口袋精灵”第二个Sprint计划----第一天进度 任务分配: 冯美欣:欢迎界面的音效 吴舒婷:游戏界面的动作条,选择答案后的音效 林欢雯:完善算法代码的设计 进度: 冯美欣:上网百度音乐资 ...
- Daily Scrum - 11/19
今天任烁帮忙更新了大家在Sprint 2中的Task,基本每人的Task都是细分到每天的,这样大家初期的工作应该会更有效率一点. 任烁今天表示“进度条背词法”应该是可以融合到原有算法中的,期待他的改进 ...
- Photo Cleaner -- proposed by Wei Zhang
Need想必大家都有用手机或相机记录生活的习惯吧!在旅途中,驴友们见到美丽的风景,往往激动地咔嚓一下拍张照记录下来.完事后发现角度不太好,于是又咔嚓一下……不知不觉中一下照了好多,然而真正需要的只是那 ...
- c#程序阅读分析
using System; using System.Collections.Generic; using System.Text; namespace FindTheNumber { class P ...