poj 2932 Coneology (扫描线)
来源:互联网 发布:淘宝如何设置图片保护 编辑:程序博客网 时间:2024/05/22 02:24
题意
平面上有N个两两不相交的圆,求所有最外层的,即不被其他圆包含的圆的个数并输出
思路
挑战程序竞赛P259页
代码
/* **********************************************Auther: xueaohuiCreated Time: 2015-7-25 16:56:13File Name : poj2932.cpp*********************************************** */#include <iostream>#include <fstream>#include <cstring>#include <climits>#include <deque>#include <cmath>#include <queue>#include <stack>#include <list>#include <map>#include <set>#include <utility>#include <sstream>#include <complex>#include <string>#include <vector>#include <cstdlib>#include <cstdio>#include <ctime>#include <bitset>#include <functional>#include <algorithm>using namespace std;#define ll long long#define N 111111int n;double x[N],y[N],r[N];bool inside(int i,int j){ double px = x[i]-x[j]; double py = y[i]-y[j]; return px*px+py*py<=r[j]*r[j];}void slove(){ vector<pair<double,int>>e; e.clear(); for(int i=0;i<n;i++){ e.push_back(make_pair(x[i]-r[i],i)); e.push_back(make_pair(x[i]+r[i],i+n)); } sort(e.begin(),e.end()); set<pair<double,int>>out; vector<int>res; res.clear(); out.clear(); for(int i=0;i<e.size();i++){ int id = e[i].second %n; if(e[i].second<n){ set<pair<double,int>>::iterator it = out.lower_bound(make_pair(y[id],id)); if(it != out.end() && inside (id,it->second)) continue; if(it != out.begin() && inside (id ,(--it)->second)) continue; res.push_back(id); out.insert(make_pair(y[id],id)); } else{ out.erase(make_pair(y[id],id)); } } sort(res.begin(),res.end()); printf("%d\n",res.size()); for(int i=0;i<res.size();i++){ if(i!=0) printf(" "); printf("%d",res[i]+1); } printf("\n");}int main(){ while(scanf("%d",&n)==1){ for(int i=0;i<n;i++){ scanf("%lf%lf%lf",&r[i],&x[i],&y[i]); } slove(); }}
0 0
- poj 2932 Coneology (扫描线)
- poj 2932 Coneology 扫描线
- poj 2932 Coneology(平面扫描)
- POJ 2932 Coneology(平面扫描)
- POJ 2932 Coneology (平面扫描)
- POJ 2932 Coneology (平面扫描)
- POJ 2932 Coneology (平面扫描)
- POJ 2932-Coneology(平面扫描-最外层的圆)
- poj2932:Coneology(扫描线)
- POJ 2932 Coneology (扫描线判断最外面的圆&set维护最近的圆)
- POJ 2932 Coneology(平面扫描/计算最外层圆个数)
- poj 2932 Coneology
- poj 2932 Coneology
- poj 2932 Coneology 扫面线法
- POJ 2932 Coneology
- POJ 2932 Coneology 笔记
- poj2932 Coneology【扫描线+set】
- POJ2398——Coneology(计算几何,扫描线)
- HDU 5289 Assignment(尺取法)
- 快速排序算法笔记
- Spring(十一)使用Spring的注解方式实现面向切面技术AOP
- 使用栈实现进制转换(大数进制转换)
- poj 3468 A Simple Problem with Integers
- poj 2932 Coneology (扫描线)
- html DOCTYPE声明详解
- TexturePacker
- struts2action配置
- Combination Sum
- Android四大组件之BroadcastReceveier
- java 内存空间
- ZOJ - 2186 Keep on Truckin'
- stm32定时器输入捕获pwm