栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 2932 Coneology

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 2932 Coneology

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include <cmath>#define sqr(x) ((x)*(x))using namespace std;const int maxn = 40000 + 10;double x[maxn], y[maxn], r[maxn];struct qry {    double x;    int id;    int stat;    qry(double x = 0, int id = 0, int stat = 0):         x(x), id(id), stat(stat) {}};struct node {    int id;    node (int id = 0): id(id) {}    bool operator < (const node &b) const {        return y[id] < y[b.id];    }};bool cmp(const qry &a, const qry &b) {    return a.x < b.x;}qry q[maxn * 2];set<node> s;int n, cnt;bool inc[maxn];set<node>::iterator wz[maxn];void init() {    cnt = 0;    for (int i = 0; i < n; ++i) {        scanf("%lf%lf%lf", &r[i], &x[i], &y[i]);        q[cnt++] = qry(x[i] - r[i], i, 0);        q[cnt++] = qry(x[i] + r[i], i, 1);    }}bool incircle(int a, int b) {    return sqrt(sqr(x[a] - x[b]) + sqr(y[a] - y[b])) + r[a] < r[b];}void solve() {    sort(q, q + cnt, cmp);    memset(inc, 0, sizeof(inc));    int ans = 0;    s.clear();    for (int i = 0; i < cnt; ++i) {        int id = q[i].id;        if (q[i].stat) { if (!inc[id]) continue; s.erase(wz[id]);        } else { set<node>::iterator it = s.lower_bound(id); if (it != s.end() && incircle(id, it -> id)) continue; if (it != s.begin() && incircle(id, (--it) -> id)) continue; inc[id] = true; ++ans; wz[id] = s.insert(node(id)).first;        }    }    printf("%dn", ans);    int tot = 0;    for (int i = 0; i < n; ++i)        if (inc[i]) { if (tot++) printf(" "); printf("%d", i + 1);        }    printf("n");}int main() {    while (scanf("%d", &n) == 1 && n) {        init();        solve();    }}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/367802.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号