hdu 3681 Prison Break 扫描线set
来源:互联网 发布:linux alias ll 编辑:程序博客网 时间:2024/06/06 21:43
set甚屌只能ORZ
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<set>#include<iostream>#include<algorithm>using namespace std;const int maxn = 51111;const double eps = 1e-8;inline int dcmp(double x) {return (x > eps) + (x < -eps);}inline double Sqr(double x) {return x * x;}int LineNow, ltp, n, cnt[maxn];struct Cir//圆{ int x; int y; int r;}c[maxn];struct Line//从左向右扫描节点{ int id; bool in; void Read(int id_, bool in_){id = id_, in = in_;} inline int GetSite()const{return c[id].x + (in ? -c[id].r : c[id].r);} bool operator<(const Line &b)const{return GetSite() < b.GetSite();}}l[maxn << 1];struct Node//从上至下排序节点{ int id; bool up; Node(){} Node(int id_, bool up_){id = id_, up = up_;} inline double GetSite()const {return c[id].y + sqrt(Sqr(c[id].r) - Sqr(LineNow - c[id].x)) * (up ? 1 : -1);} bool operator<(const Node &b)const { double y1 = GetSite(); double y2 = b.GetSite(); return dcmp(y1 - y2) ? y1 > y2 : up > b.up; }};set<Node> s;set<Node>::iterator iti, itn;void ReadData(int n){ int i; for(ltp = i = 0; i < n; ++ i) { scanf("%d%d%d", &c[i].x, &c[i].y, &c[i].r); l[ltp ++].Read(i, true); l[ltp ++].Read(i, false); }}int MakeAns(){ int i, ans = 0; sort(l, l + ltp); s.clear(); for(i = 0; i < ltp; ++ i) { LineNow = l[i].GetSite(); if(!l[i].in) { s.erase(Node(l[i].id, true)); s.erase(Node(l[i].id, false)); } else { iti = itn = s.insert(Node(l[i].id, true)).first;int time=(*iti).GetSite(); itn ++; if(iti == s.begin() || itn == s.end()) cnt[l[i].id] = 1; else { iti --; if((*iti).id == (*itn).id) cnt[l[i].id] = cnt[(*iti).id] + 1; else cnt[l[i].id] = max(cnt[(*iti).id], cnt[(*itn).id]); } ans = max(ans, cnt[l[i].id]); s.insert(Node(l[i].id, false)); } } return ans;}int main(){ while(scanf("%d", &n) != EOF) { ReadData(n); printf("%d\n", MakeAns()); } return 0;}
0 0
- hdu 3681 Prison Break 扫描线set
- hdu 3511 Prison Break 圆 扫描线
- HDU 3681 - Prison Break
- HDU 3681 Prison Break
- HDU 3681Prison Break
- HDU 3681 Prison Break
- HDU 3681 Prison Break
- hdu 3681 Prison Break
- hdu 3681 Prison Break bfs+二分+dp
- hdu 3681 Prison Break (旅行商问题)
- HDU 3681 Prison Break (搜索+状压dp)
- hdu 3681 Prison Break(dp || dfs)
- hdu 3681 Prison Break (TSP问题)
- HDU 3681 Prison Break floyd+状压+二分
- hdu 3681 Prison Break (BFS+状压)
- HDU 3681 Prison Break (状压DP+二分)
- hdu 3681 Prison Break bfs + 二分 + TSP
- 【搜索+状压DP】 HDU 3681 Prison Break
- Codeforces Round #256 (Div. 2) | 前4题
- 2014年开发者需要了解的10大开发趋势和技能
- WinForm中,实现TextBox的验证
- Log4Net使用指南
- Actioncontext和ServletActioncontext的区别
- hdu 3681 Prison Break 扫描线set
- static 和 no static Member function学习
- C# manifest文件介绍
- Winsocke简述、取网页原理概述
- dba 常用管理脚本收集(测)
- POJ1163 The Triangle 【DP】
- 极度恐惧阿斯科利大家看啦时间的
- atitit.提升开发效率---MDA 软件开发方式的革命(3)----自动化建表
- 会场安排问题--分好情况后,怎么考虑让更少的情况发生