【题目链接】 http://poj.org/problem?id=2932

【题目大意】

  给出N个两两没有公共点的圆,求所有不包含于其它圆内部的圆

【题解】

  我们计算出所有点在圆心所有y位置的x值,
  由于两两没有公共点,所以当我们对所有的x坐标进行扫描时,只要扫描相邻的x,
  判定扫描到的圆和与其x相邻的圆是否是圆包含关系就可以判断一个圆的位置
  扫描到左端点时,如果圆其被包含,则什么都不做,否则,将这个圆加入set中,
  当扫描到右端点时,如果圆被包含,则什么都不做,否则将圆从set中去除。

【代码】

#include <cstdio>
#include <algorithm>
#include <vector>
#include <set>
using namespace std;
const int MAX_N=40010;
int N;
double x[MAX_N],y[MAX_N],r[MAX_N];
bool inside(int i,int j){
double dx=x[i]-x[j],dy=y[i]-y[j];
return dx*dx+dy*dy<=r[j]*r[j];
}
void solve(){
vector<pair<double,int> >events;
for(int i=0;i<N;i++){
events.push_back(make_pair(x[i]-r[i],i));
events.push_back(make_pair(x[i]+r[i],i+N));
}
sort(events.begin(),events.end());
set<pair<double,int> >outers;
vector<int> res;
for(int i=0;i<events.size();i++){
int id=events[i].second%N;
if(events[i].second<N){
set<pair<double,int> >::iterator it=outers.lower_bound(make_pair(y[id],id));
if(it!=outers.end()&&inside(id,it->second))continue;
if(it!=outers.begin()&&inside(id,(--it)->second))continue;
res.push_back(id);
outers.insert(make_pair(y[id],id));
}else outers.erase(make_pair(y[id],id));
}sort(res.begin(),res.end());
printf("%d\n",res.size());
for(int i=0;i<res.size();i++){
printf("%d%c",res[i]+1,i+1==res.size()?'\n':' ');
}
}
void init(){
for(int i=0;i<N;i++)scanf("%lf%lf%lf",&r[i],&x[i],&y[i]);
}
int main(){
while(~scanf("%d",&N)){
init();
solve();
}return 0;
}

  

POJ 2932 Coneology(扫描线)的更多相关文章

  1. POJ 2932 圆扫描线

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

  2. poj 2932 Coneology(扫描线+set)

    Coneology Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 3574   Accepted: 680 Descript ...

  3. poj 2932 Coneology (扫描线)

    题意 平面上有N个两两不相交的圆,求全部最外层的,即不被其它圆包括的圆的个数并输出 思路 挑战程序竞赛P259页 代码 /* ************************************* ...

  4. POJ 2932 Coneology计算最外层圆个数

    平面上有n个两两没有公共点的圆,i号圆的圆心在(xi,yi),半径为ri,编号从1开始.求所有最外层的,即不包含于其他圆内部的圆.输出符合要求的圆的个数和编号.n<=40000. (注意此题无相 ...

  5. TTTTTTTTTTTTTTT poj 2932 Coneology 平面扫描+STL

    题目链接 题意:有n个圆,圆之间不存在相交关系,求有几个不被其他任何圆包含的圆,并输出圆的编号: #include <iostream> #include <cstdio> # ...

  6. Coneology(POJ 2932)

    原题如下: Coneology Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4937   Accepted: 1086 D ...

  7. POJ 1151 Atlantis (扫描线+线段树)

    题目链接:http://poj.org/problem?id=1151 题意是平面上给你n个矩形,让你求矩形的面积并. 首先学一下什么是扫描线:http://www.cnblogs.com/scau2 ...

  8. N - Picture - poj 1177(扫描线求周长)

    题意:求周长的,把矩形先进行融合后的周长,包括内周长 分析:刚看的时候感觉会跟棘手,让人无从下手,不过学过扫描线之后相信就很简单了吧(扫描线的模板- -),还是不说了,下面是一精确图,可以拿来调试数据 ...

  9. poj2932 Coneology (扫描线)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Coneology Time Limit: 5000MS   Memory Lim ...

随机推荐

  1. Ubuntu下使用mysqli-connect连接mysql时报错:ERROR 1698 (28000): Access denied for user 'root'@'localhost'

    LNMP安装好后,写了个index.php文件,里面的内容很简单,就是想测试php与mysql的通信是否正常,代码如下: <?php $host = 'localhost'; $user = ' ...

  2. java生成API文档

    1.选择项目右键-Export\javadoc 2.选择生成工具在jdk安装目录下jdk\bin\javadoc.exe 3.在Eclipse里 export 选 JavaDoc,在向导的最后一页的E ...

  3. 转:JVM Server与Client运行模式

    转自:http://blog.csdn.net/zhuyijian135757/article/details/38391785 JVM Server模式与client模式启动,最主要的差别在于:-S ...

  4. org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported解决!

    org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported解决 ...

  5. POJ1061-青蛙的约会---扩展欧几里德算法求最小整数解

    扩展欧几里得算法模板 #include <cstdio> #include <cstring> #define ll long long using namespace std ...

  6. 前端导出文件功能document.execCommand命令

    参照 http://blog.csdn.net/woshinia/article/details/18664903

  7. 使用Windows下的git工具往github上传代码 踩坑记录

    使用Windows下的git工具往github上传代码 踩坑记录 背景 由于以前接触的项目都是通过svn进行版本控制,现在公司项目使用git,加上自己平时有一个练手小项目,趁着周末试着把项目上传到自己 ...

  8. HCharts的y轴保留一位和 两位小数

    保留一位小数,有一位小数的不变 yAxis : { labels : {  formatter : function () { var strVal = ''+this.value ; if (str ...

  9. DRF视图集的路由设置

    在使用DRF视图集时,往往需要配一大堆路由,例如: # views.py class DepartmentViewSet(ListModelMixin,CreateModelMixin,Retriev ...

  10. Selenium2+python自动化28-table定位【转载】

    前言 在web页面中经常会遇到table表格,特别是后台操作页面比较常见.本篇详细讲解table表格如何定位. 一.认识table 1.首先看下table长什么样,如下图,这种网状表格的都是table ...