题目描述:

3663

4660

4206

题解:

第一眼:不成立的互相连边,然后用网络流求解无向图最小点覆盖!

好吧我不会。

正解:

每个点对应圆上的一段圆弧,长这样:

设对应圆弧$(l,r)$。

若$[a,b]$可以同时选中,那么$la<lb<ra<rb$(或者二者调换)。

还有一点是,优弧=劣弧。这个自己手画一下应该会更清楚。

所以将$[a,b]$限制在$[-Pi,Pi]$内,问题转化为求最长的$la<lb<……<lk<ra<rb<……<rk$。

先按$l$排序,枚举$a$,把合法的$rb……rk$都扔到数组里,最后跑一遍最长上升子序列。

时间复杂度$O(n^2logn)$

代码:

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = ;
const double Pi = acos(-1.0);
const double eps = 1e-;
int dcmp(double x)
{
if(fabs(x)<=eps)return ;
return x>?:-;
}
template<typename T>
inline void read(T&x)
{
T f = ,c = ;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){c=c*+ch-'';ch=getchar();}
x = f*c;
}
int n,x[N],y[N],tl,ans,t;
struct node
{
double x,y;
node(){}
node(double x,double y):x(x),y(y){}
bool operator < (const node&a)const{return dcmp(x-a.x)?dcmp(x-a.x)<:dcmp(y-a.y)<;}
}p[N];
double r,sta[N],s[N];
void fix(double x)
{
int l = ,r = t,k = t;
while(l<=r)
{
int mid = (l+r)>>;
if(s[mid]>x)k=mid,r=mid-;
else l=mid+;
}
s[k] = x;
}
void LIS()
{
t = ;
for(int i=;i<=tl;i++)
if(!t||sta[i]>s[t])s[++t]=sta[i];
else fix(sta[i]);
ans = max(ans,t);
}
int main()
{
// freopen("crazy.in", "r", stdin);
// freopen("crazy.out", "w", stdout);
// freopen("tt.in","r",stdin);
read(n),read(r);
for(int i=;i<=n;i++)
{
read(x[i]),read(y[i]);
double bas = atan2(y[i],x[i]);
double dlt = acos(r/sqrt(x[i]*x[i]+y[i]*y[i]));
p[i].x = bas-dlt,p[i].y = bas+dlt;
if(p[i].x<-Pi)p[i].x+=*Pi;
if(p[i].y>Pi)p[i].y-=*Pi;
if(p[i].x>p[i].y)swap(p[i].x,p[i].y);
}
sort(p+,p++n);
for(int i=;i<=n;i++)
{
tl=;
for(int j=i+;j<=n&&p[j].x<=p[i].y;j++)
if(p[j].y>p[i].y)sta[++tl]=p[j].y;
LIS();
}
printf("%d\n",ans+);
return ;
}

三倍经验——bzoj3663、4660、4206 Crazy Rabbit/最大团的更多相关文章

  1. 【BZOJ4660】Crazy Rabbit 结论+DP

    [BZOJ4660]Crazy Rabbit Description 兔子们决定在自己的城堡里安排一些士兵进行防守.给出 n 个点的坐标,和城堡里一个圆心在原点的圆形的障碍,兔子们希望从中选出 k 个 ...

  2. bzoj 4660 Crazy Rabbit——LIS解决“相交”限制的思想

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4660 想到一个点可以用它与圆的两个切点表示.并想到可以把切点极角排序,那么就变成环上的一些区 ...

  3. Bzoj3663/4660 CrazyRabbit

    题意:给定平面上一个圆和一堆圆外的点,要求选出尽可能多的点使得它们之间两两连线都不和圆相交.保证任意两点连线不和圆相切.点数<=2000 这题是很久以前在某张课件上看见的.看了题解还搞了三小时, ...

  4. P3897 [湖南集训]Crazy Rabbit

    \(\color{#0066ff}{ 题目描述 }\) 兔子们决定在自己的城堡里安排一些士兵进行防守. 给出 n 个点的坐标,和城堡里一个圆心在原点的圆形的障碍,兔子们希望从中选出 k 个兔子,使得它 ...

  5. bzoj3663/4660CrazyRabbit && bzoj4206最大团

    题意 给出平面上N个点的坐标,和一个半径为R的圆心在原点的圆.对于两个点,它们之间有连边,当且仅当它们的连线与圆不相交.求此图的最大团. 点数<=2000,坐标的绝对值和半径<=5000. ...

  6. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  7. CSS3_动画 animation

    在项目中,颜色,图片,等等数据都保存在数组中   动画 使元素从一种样式逐渐变化到另一种样式的 animation: name ; 无顺序要求,但是必须先写 持续时间 ,再写 延迟时间 原理 人眼在看 ...

  8. BZOJ 4206: 最大团

    4206: 最大团 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 91  Solved: 36[Submit][Status][Discuss] De ...

  9. bzoj 4206 最大团 几何+lis

    最大团 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 142  Solved: 65[Submit][Status][Discuss] Descrip ...

随机推荐

  1. python 之 函数 生成器

    5.10 生成器 函数内有yield关键字,再调用函数就不会立刻执行函数体代码,会得到一个返回值,该返回值就是生成器,生成器本质就是迭代器 def chicken():    print('===== ...

  2. Python面向对象之魔法方法/双下方法

    1.__new__ and __init__ 这两个方法都是在实例化的时候执行,__new__ 在 __init__ 之前执行,并且 如果实例化的时候封装属性,__new__也是必须要传的,而且__n ...

  3. 洛谷1373(dp)

    常规线性dp,需要时就加一维.\(dp[i][j][t][s]\)表示在点\((i,j)\)时瓶子里剩\(t\)且为\(s\)走(0代表小a,1代表uim)时的方案数. de了半天发现是初次尝试的快速 ...

  4. NET Core实现OAuth2.0的ResourceOwnerPassword和ClientCredentials模式

    NET Core实现OAuth2.0的ResourceOwnerPassword和ClientCredentials模式 前言 开发授权服务框架一般使用OAuth2.0授权框架,而开发Webapi的授 ...

  5. 对jvm虚拟机 内存溢出的思考

    java内存溢出:当新产生对象时,新生代空间不够,导致无法申请到足够的空间,报内存溢出 内存泄漏:一些静态集合,静态常量没有被gc清理,越来越多,占用内存,最后导致无法申请到新的空间

  6. AnyCAD OpenSource 版本下载和编译

    下载: SVN下载地址:https://anycad.svn.codeplex.com/svn 或者直接下载:http://anycad.codeplex.com/SourceControl/late ...

  7. 使用Calendar来获取当前日期和时间

    1 package com.java.test; 2 3 import java.text.SimpleDateFormat; 4 import java.util.Calendar; 5 6 pub ...

  8. 1169 传纸条 2008年NOIP全国联赛提高组 个人博客:attack.cf

    1169 传纸条 2008年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond         题目描述 Description 小渊和小轩 ...

  9. 《超实用的Node.js代码段》连载一:获取Buffer对象字节长度

    我们知道Node.js框架下的Buffer对象能够对二进制数据提供很好的支持,那么获取一个Buffer对象真实的字节长度则是必须要用到的功能了.Node.js框架为开发人员提供了一个Buffer.by ...

  10. Hbase region查找过程

    HBase的table是该region切分的,client操作一个row的时候,如何知道这个row对应的region是在哪台Region server上呢?这里有个region location过程. ...