tjut 3511

原创 2016年08月30日 08:34:18
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <set>
#include <algorithm>

using namespace std;

const int UP = 0;
const int DOWN = 1;
const int IN = 0;
const int OUT = 1;
const int N = 50005;

int Time;

struct circle {
    int x, y, r;
    int w;
    void read() {
        scanf("%d %d %d", &x, &y, &r);
        w = 0;
    }
    int getX(int flag) {
        if( flag == IN )     return x - r;
        else                return x + r;
    }
    double getY(int flag) {
        double ret = sqrt((double)r*r-(double)(Time-x)*(Time-x));
        if( flag == UP )     return (double)y + ret;
        else                return (double)y - ret;
    }
    
} cir[N];

struct event {
    int x, y, id;
    int flag;
    void get(int _x, int _y, int _id, int _flag) {
        x = _x;
        y = _y;
        id = _id;
        flag = _flag;
    }
    bool operator<(const event ev) const {
        return x < ev.x || x == ev.x && y > ev.y;
    }
} eve[N*2];

struct node {
    int id;
    int flag;
    node(){}
    node(int _id, int _flag) {
        id = _id;
        flag = _flag;
    }
    bool operator<(const node a) const {
        double y1 = cir[id].getY(flag);
        double y2 = cir[a.id].getY(a.flag);
        return y1 > y2 || y1 == y2 && flag < a.flag;
    }
};

int n, eveN;

set<node> line;
set<node>::iterator it, f, e, p;

inline int max(int a, int b) { return a > b ? a : b;}

void moveline() {
    line.clear();
    for(int i = 0; i < eveN; i ++) {
        Time = eve[i].x;
        if( eve[i].flag == OUT ) {
            line.erase(node(eve[i].id, UP));
            line.erase(node(eve[i].id, DOWN));
        } else {
            it = line.insert(node(eve[i].id, UP)).first;
            e = f = it;
            e ++;
            int id = it->id;
            if( it == line.begin() || e == line.end() ) {
                cir[id].w = 1;
            } else {
                f --;
                if( f->id == e->id ) {
                    cir[id].w = cir[f->id].w + 1;
                } else {
                    cir[id].w = max( cir[f->id].w, cir[e->id].w);
                }
            }
            line.insert(node(eve[i].id, DOWN));
        }
    }
}

int main() {
    while( scanf("%d", &n) != EOF ) {
        eveN = 0;        
        for(int i = 0; i < n; i ++) {
            cir[i].read();
            eve[eveN++].get(cir[i].getX(IN), cir[i].y, i, IN);
            eve[eveN++].get(cir[i].getX(OUT), cir[i].y, i, OUT);
            
        }
        sort(eve, eve + eveN);
        moveline();
        int ans = 0;
        for(int i = 0; i < n; i ++) {
            ans = max(ans, cir[i].w);
        }
        printf("%d\n", ans);
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

如何创建自己的Instant Client包

参考:http://www.nyoug.org/Presentations/2007/200703_Ji_Instant%20Client.pdf IC介绍 许多人正在使用Oracle Insta...
  • fan_hai_ping
  • fan_hai_ping
  • 2014年11月24日 12:32
  • 5187

ZOJ 3511 不相交切切多边形 线段树求最大边数

题意: n多凸边形 m刀 (把n切m刀,问切完后的图形中 最多的边数 是多少) 切a点-b点 数据保证切的刀不会相交 思路: 2点之间的剩余点数就是边数, 把a-b距离 近 排序 切完一刀就统计一下切...
  • qq574857122
  • qq574857122
  • 2013年09月26日 22:51
  • 1313

在海思3511上面实现wifi模块变成ap站点功能+wifi rt3070驱动的移植

参照了网上的无数博客,结合自己的开发板,终于在海思3511开发板上面实现wifi模块变ap站的功能。首先开发板里面没有支持ap功能的驱动,这个就需要手工移植。整体的步骤都大同小异,主要是平台的差异,导...
  • caoyuanll
  • caoyuanll
  • 2014年07月13日 20:37
  • 1118

tjut 5412

#include using namespace std; const int Maxn=100020; int nq; int ty[Maxn*3],ql[Maxn*3],qr[Maxn*3],qk...
  • luozhong11
  • luozhong11
  • 2016年07月22日 08:54
  • 85

TL_IPC_HI3511_ESV1.6_V3.3.8_140731.tar.gz

  • 2014年10月30日 00:43
  • 2.11MB
  • 下载

BZOJ3511 土地划分

一眼最小割 考虑划为S集代表A国,划为T集代表B国 建图:S连每个点流量VA,每个点连T流量VB 对于每条边,两个端点点之间连双向边流量EC 新建一个点X,S连X流量EA,X连两个端点流量IN...
  • neither_nor
  • neither_nor
  • 2017年01月04日 15:57
  • 460

BZOJ3511 土地划分 题解&代码

pkusc发现自己不会费用流233333于是两天速成费用流【然而这是一道最小割(最大流QwQ 题意: 给出n个点m条边,并设定: 点x在被划分至集合A时获得权值A[x],否则即被划分至集合B并获...
  • Rainbow6174
  • Rainbow6174
  • 2016年06月09日 10:25
  • 2065

【BZOJ3511】土地划分【最小割】

看了题解才会建图... 对于点x,从S向x连容量为va的边,从x向T连容量为vb的边。 对于边(u, v),从S向u和v分别连两条容量为ea / 2的边,从u和v向T分别连两条容量为eb ...
  • BraketBN
  • BraketBN
  • 2016年02月28日 20:03
  • 573

高中OJ3511. 【NOIP2013模拟11.5A组】cza的蛋糕(cake)

题目Description cza特别喜欢吃海苔,怎么吃也吃不够。cza的生日到来时,他的父母给他买了许许多多的海苔和一个生日蛋糕。海苔是一个1*2或2*1的长方形,而蛋糕则是一个n*m的矩阵。蛋...
  • gmh77
  • gmh77
  • 2017年08月06日 15:02
  • 112

hdu 3511

  题目意思实际上就是找嵌套数最大的圆并输出其嵌套数。  一开始见时间有5000ms,就果断暴力,然后果断超时— — 之后用二分,终于不tle啦,但wa。。。TAT。上网找题解,发现有两种方法,一个是...
  • New_C_YUER
  • New_C_YUER
  • 2011年03月29日 23:11
  • 670
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:tjut 3511
举报原因:
原因补充:

(最多只允许输入30个字)