求n个圆中没有被包含的圆。模仿扫描线从左往右扫,到左边界此时如有3个交点,则有3种情况,以此判定该圆是否被离它最近的圆包含,而交点和最近的圆可以用以y高度排序的Set来维护。因此每次到左边界插入该圆,找该圆最近的两个圆(上方和下方)判断是否包含,到右边界则从Set中删除该圆。

/** @Date    : 2017-08-13 17:27:55* @FileName: POJ 2932 圆扫描线.cpp* @Platform: Windows* @Author  : Lweleth (SoungEarlf@gmail.com)* @Link    : https://github.com/* @Version : $Id$*/
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <utility>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <stack>
#include <queue>
#include <math.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;int n;
struct circle
{double x, y, r;circle(){}circle(double _x, double _y, double _r){x = _x, y = _y, r = _r;}
};circle c[N];
pair<double, int>p[N*2];
int ans[N];int isinside(int a, int b)
{double dx = c[a].x - c[b].x;double dy = c[a].y - c[b].y;return dx * dx + dy * dy <= c[b].r * c[b].r;
}int main()
{scanf("%d", &n);for(int i = 0; i < n; i++){double x, y, r;scanf("%lf%lf%lf", &r, &x, &y);c[i] = circle(x, y, r);}for(int i = 0; i < n; i++){p[i*2] = MP(c[i].x - c[i].r, i);p[i*2 + 1] = MP(c[i].x + c[i].r, i + n);}sort(p, p + 2 * n);set<pair<double, int> >q;int cnt = 0;for(int i = 0; i < 2 * n; i++){if(p[i].se < n){set<pair<double, int> >::iterator it;/*auto */it = q.lower_bound(MP(c[p[i].se].y, p[i].se));if(it != q.end() && isinside(p[i].se, it->se)|| it != q.begin()&&isinside(p[i].se, (--it)->se))continue;q.insert(MP(c[p[i].se].y, p[i].se));ans[cnt++] = p[i].se;}else q.erase(MP(c[p[i].se%n].y, p[i].se%n)); }sort(ans, ans + cnt);printf("%d\n", cnt);for(int i = 0; i < cnt; i++)printf("%d%s", ans[i] + 1, i==cnt-1?"\n":" ");return 0;
}

转载于:https://www.cnblogs.com/Yumesenya/p/7688240.html

POJ 2932 圆扫描线相关推荐

  1. 20180513模拟赛

    T1/Codeforces 975C 很简单,直接前缀和然后二分找答案即可,注意超过最大挡箭数的时候会"全员复活" ······ #include<bits/stdc++.h ...

  2. ACM比赛经验、刷题记录及模板库总结(更新中)

    前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...

  3. 【POJ 2482】 Stars in Your Window(线段树+离散化+扫描线)

    [POJ 2482] Stars in Your Window(线段树+离散化+扫描线) Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  4. POJ 1177 Picture [离散化+扫描线+线段树]

    http://poj.org/problem?id=1177 给若干矩形,求被覆盖的区域的周长. 将 y 坐标离散化后,按 x 坐标进行扫描.用线段树维护两个东西,当前竖线的叠加长度 len 和 条数 ...

  5. ybtoj洛谷P3268:圆的异或并(扫描线)

    解析 很神奇的一道题. 关键条件:任意两个圆无交. 把一个圆分成上下两个圆弧,那么所有圆弧的高度关系不会发生变化. 所以可以开一个 set,维护一个从左往右扫的扫描线,按照当前扫描线的横坐标定义比较符 ...

  6. 扫描线三巨头 hdu1928hdu 1255 hdu 1542 [POJ 1151]

    学习链接:http://blog.csdn.net/lwt36/article/details/48908031 学习扫描线主要学习的是一种扫描的思想,后期可以求解很多问题. 扫描线求矩形周长并 hd ...

  7. 【HDU5299】Circles Game,圆的扫描线+树上删边游戏

    传送门 思路: 两个板子的结合 如果会方法的话没什么难度 至于为什么要写这个博客呢? 只是拿来当板子用-- 圆的扫描线理解了好久,终于想出来是怎么一回事了 我觉得这种东西还是自己主动去思考的好,写的长 ...

  8. POJ 1151 Atlantis 矩形面积求交/线段树扫描线

    Atlantis 题目连接 http://poj.org/problem?id=1151 Description here are several ancient Greek texts that c ...

  9. 【扫描线法】 poj 1177 hdu 1828

    可以看看这里: http://www.cnblogs.com/Booble/archive/2010/10/10/1847163.html 为了写扫描线, 大概写了有史以来最丑的线段树了. poj 1 ...

最新文章

  1. 青蛙跳台(含变种)及汉诺塔递归,母牛生小牛
  2. 使用Spring WebFlux进行操作
  3. sql查询 关联帖子_MySQL的大分页查询该如何优化?
  4. 同样是卖票,为啥阿里卖电影票就不卡?技术上做了啥???
  5. 扑捉和捕捉的区别照相_扑捉和捕捉的区别照相
  6. android 动态规划,7. 动态规划(二)Android移动应用开发.pdf
  7. python打包exe
  8. VS2008+CUDA6.0 出现LINK:fatal error LINK1146:没用选项/LIBPATH指定的参数
  9. 计算机html二级难度,计算机二级考试越来越难的实锤!真实数据告诉你到底难在哪里?...
  10. 一致代价搜索_58搜索效率优化平台建设实践
  11. QGIS展示三维DEM数据
  12. 电脑变WIFI:建立虚拟共享WIFI热点可查看WIFI密码windows中使用bat批处理命令提示符cmd创建教程含工具
  13. 原始 NeRF(新视图重建的神经辐射场) 论文主要点细致介绍
  14. Nolanjdc对接傻妞教程
  15. MySQL - 全局锁、表级锁、行级锁、元数据锁、自增锁、意向锁、共享锁、独占锁、记录锁、间隙锁、临键锁、死锁
  16. 计算机技术预测蛋白质结构,蛋白质结构预测:生命科学的又一场竞争
  17. python中主函数循环_python入门(三):分支、循环、函数详解
  18. .NET程序中加入Autodesk Design Review 2013 ,打包完成后安装提示未注册XXX.dll解决办法
  19. 【Unity VR开发】结合VRTK4.0:不可移动区域
  20. Apple Watch卡住在苹果标志界面,该怎么解决?

热门文章

  1. 中西医与算法之间的联系
  2. GNU make manual 翻译( 一百零九)
  3. 如何发送Head请求
  4. sql2005导出Excel错误解决方法
  5. altas(ajax)控件(二十三):等级选择控件Rating
  6. 整理的常用JAVA开源库简介
  7. English debate for sports motion with notes from PM (feedback included)
  8. characteriscation in English debate
  9. 不要在递归中使用静态容器
  10. C#new出来的结构体内存分配