题目描述:

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. PJzhang:web漏洞扫描工具sitadel

    猫宁!!! 参考链接:https://www.freebuf.com/sectool/194769.html 转变博客的写作思路,力求精简快捷,不浪费自己或者他人的时间. sitadel是一款精简的w ...

  2. append、replace、replaceAll、indexof、lastIndexOf、substring的用法

    1.append StringBuffer buf = new StringBuffer("Hard "): String  aString  =  "Waxworks& ...

  3. xml布局文件

    https://blog.csdn.net/u013475386/article/details/44339035 gravity写在容器中中 layout_gravity写在控件中 layout_m ...

  4. net Core 2.0应用程序发布到IIS

    .net Core 2.0应用程序发布到IIS上注意事项   .net Core2.0应用程序发布window服务器报错容易错过的配置. 1.应用程序发布. 2.IIS上新建网站. 3.应用程序池选择 ...

  5. scau 18087 开始我是拒接的 mobius

    其实有一个很有用的技巧就是,把gcd = 4的贡献,压去gcd = 2时的贡献,就不需要考虑这么多的了. 为什么可以把gcd = 4的,压去gcd = 2的呢,gcd = 12的,压去gcd = 6的 ...

  6. PSS下载助手(PSX Download Helper)1.7.6.1发布

    新增自动查找本地替换文件,让替换大法也更简单的计划…… 使用方法很简单,首先进入设置勾选“自动查找替换文件”,然后点击“选择目录”,最后保存设置即可.将文件下载至你选择的目录中,然后再次在主机/掌机端 ...

  7. SpringBoot 2.0中SpringWebContext 找不到无法使用的问题解决

    为了应对在SpringBoot中的高并发及优化访问速度,我们一般会把页面上的数据查询出来,然后放到redis中进行缓存.减少数据库的压力. 在SpringBoot中一般使用 thymeleafView ...

  8. java实现按对象某个字段排序,排序字段和规则自定义

    @SuppressWarnings({ "unchecked", "rawtypes" }) private <T> void sort(List& ...

  9. 移动端rem单位和px单位换算

    rem单位是根据html元素的单位在页面根据不同的手机屏幕分辨率动态整体的按比例缩小或放大字体. 假如html{font-size: 14px;},那么1rem=14px; 一个div宽度48px,那 ...

  10. Python3+Selenium3+webdriver学习笔记5(模拟常用键盘和鼠标事件)

    #!/usr/bin/env python# -*- coding:utf-8 -*- from selenium import webdriverfrom selenium.webdriver.co ...