三倍经验——bzoj3663、4660、4206 Crazy Rabbit/最大团
题目描述:
题解:
第一眼:不成立的互相连边,然后用网络流求解无向图最小点覆盖!
好吧我不会。
正解:
每个点对应圆上的一段圆弧,长这样:

设对应圆弧$(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/最大团的更多相关文章
- 【BZOJ4660】Crazy Rabbit 结论+DP
[BZOJ4660]Crazy Rabbit Description 兔子们决定在自己的城堡里安排一些士兵进行防守.给出 n 个点的坐标,和城堡里一个圆心在原点的圆形的障碍,兔子们希望从中选出 k 个 ...
- bzoj 4660 Crazy Rabbit——LIS解决“相交”限制的思想
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4660 想到一个点可以用它与圆的两个切点表示.并想到可以把切点极角排序,那么就变成环上的一些区 ...
- Bzoj3663/4660 CrazyRabbit
题意:给定平面上一个圆和一堆圆外的点,要求选出尽可能多的点使得它们之间两两连线都不和圆相交.保证任意两点连线不和圆相切.点数<=2000 这题是很久以前在某张课件上看见的.看了题解还搞了三小时, ...
- P3897 [湖南集训]Crazy Rabbit
\(\color{#0066ff}{ 题目描述 }\) 兔子们决定在自己的城堡里安排一些士兵进行防守. 给出 n 个点的坐标,和城堡里一个圆心在原点的圆形的障碍,兔子们希望从中选出 k 个兔子,使得它 ...
- bzoj3663/4660CrazyRabbit && bzoj4206最大团
题意 给出平面上N个点的坐标,和一个半径为R的圆心在原点的圆.对于两个点,它们之间有连边,当且仅当它们的连线与圆不相交.求此图的最大团. 点数<=2000,坐标的绝对值和半径<=5000. ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- CSS3_动画 animation
在项目中,颜色,图片,等等数据都保存在数组中 动画 使元素从一种样式逐渐变化到另一种样式的 animation: name ; 无顺序要求,但是必须先写 持续时间 ,再写 延迟时间 原理 人眼在看 ...
- BZOJ 4206: 最大团
4206: 最大团 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 91 Solved: 36[Submit][Status][Discuss] De ...
- bzoj 4206 最大团 几何+lis
最大团 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 142 Solved: 65[Submit][Status][Discuss] Descrip ...
随机推荐
- HttpClient 应用案例揭破应用Discuss论坛登录
闲来无事,写了一个对discuss论坛登录的案例,初次上场按照以前的惯例没成功,见过抓包分析discuss论坛成功完成,废话不多说 直接上代码. 1:winform 做客户端,添加HttpClient ...
- ubuntu 16.04 单用户____修改忘记密码
1.开机按ESC,出现如下界面,选中如下选项 2.按回车键进入如下界面,然后选中有recovery mode的选项 3.按e进入如下界面,找到图中红色框的recovery nomodeset并将其删掉 ...
- js 获取两个日期相差的天数--自定义方法
//获取两个日期的相差天数 datedifference=function(sDate1, sDate2) { var dateSpan, tempDate, iDays; sDate1 = Date ...
- VS 小插件 之 编辑器背景图片
一.引言 不知道标题的名字我描述的是否正确哈,其实就是用VS写代码的时候,背景一般都是纯白 或者 纯黑(看主题而定),那么我前段时间发现 只需要一个VS插件,居然可以给VS设置背景图片,甚至还可以循环 ...
- namedJDBC查询
import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.spring ...
- spring boot 事务
spring事务:默认自动提交只读:@Transactional(readOnly = true)读写:@Transactional(),因为等同于@Transactional(readOnly = ...
- kindeditor 修改上传图片的路径的方法
默认情况下kindeditor上传的图片在编辑器的根目录/attached/目录下.以日期建一个目录,然后保存文件.有些时候大概我们并不想这样.考虑到更新编辑器,或更换编辑器不太方便.比如我现在想把上 ...
- JAVA常量介绍
常量: 在程序执行过程中,其值不发生改变的量: 1.分类: 字面值常量和自定义常量: 1.字面值常量有以下几种: 字符串常量.小数常量.整数常量.字符常量.布尔常量(true.false).空 ...
- 在jquery事件中修改Angular的model
HTML代码如下 <!DOCTYPE html> <html ng-app="qm"> <body> <input type=" ...
- Ubuntu 16.04 换国内源
官方渠道,图形界面,操作简单,可以说对新手及其友好!! 依次打开:搜索,软件与更新,第一个和第三个勾上,下载自,其它,然后在中国条目下选择你想使用的镜像站点,然后点“选择服务器”,然乎点击“关闭”,选 ...