【BZOJ4660】Crazy Rabbit

Description

兔子们决定在自己的城堡里安排一些士兵进行防守。给出 n 个点的坐标,和城堡里一个圆心在原点的圆形的障碍,兔子们希望从中选出 k 个兔子,使得它们两两所在的直线都不与圆相交。兔子们希望知道最多能选出多少兔子

Input

第一行两个整数 N 和 R, 表示兔子的个数和圆的半径接下来 N 行,每行两个整数 xi 和 yi ,表示第 i 只兔子的坐标保证每只兔子都严格在障碍外部,且两两的所在的直线不与圆相切。
对于 100% 的测试数据, 1 <= n <= 2000; 1 <= R, xi, yi <= 5000

Output

输出一行一个整数, 表示最多能选出多少兔子

Sample Input

6 3
0 6
-7 -4
-3 -2
7 -5
-2 3
8 -3

Sample Output

4
【样例1解释】
选择第 1, 2, 6, 4 只兔子即可。

题解:神题,先%一发达哥的题解:http://www.cnblogs.com/liu-runda/p/6701557.html。

下面只说如何处理区间不包含。先将所有区间按l排序,然后枚举左端点i,将所有li<lj<ri的区间j都拿出来,然后求出这些区间关于r的最长上升子序列即可。最长上升子序列可以采用基于upper_bound的nlogn的做法,详见代码。

烦人的是,这是一个环,在环上比较大小是一件十分捉鸡的事情。。。还是详见代码吧。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#define pi acos(-1.0)
using namespace std;
const int maxn=2010;
struct qj
{
double l,r;
}p[maxn];
int n,m,ans;
double R;
double q[maxn],sta[maxn];
bool cmp(const qj &a,const qj &b)
{
return (a.l==b.l)?(a.r<b.r):(a.l<b.l);
}
int LIS()
{
int top=0,i;
sta[++top]=q[1];
for(i=2;i<=m;i++)
{
if(q[i]>sta[top]) sta[++top]=q[i];
else
{
int t=upper_bound(sta+1,sta+top+1,q[i])-sta;
sta[t]=q[i];
}
}
return top;
}
int main()
{
scanf("%d%lf",&n,&R);
int i,j;
for(i=1;i<=n;i++)
{
double a,b,c,d;
scanf("%lf%lf",&a,&b);
c=atan2(b,a),d=acos(R/sqrt(a*a+b*b));
p[i].l=c-d,p[i].r=c+d;
if(p[i].l<=-pi) p[i].l+=2*pi;
if(p[i].r>pi) p[i].r-=2*pi;
if(p[i].l>p[i].r) swap(p[i].l,p[i].r);
}
sort(p+1,p+n+1,cmp);
for(i=1;i<=n;i++)
{
for(m=0,j=i+1;j<=n;j++) if(p[j].l<=p[i].r&&p[j].r>p[i].r) q[++m]=p[j].r;
ans=max(ans,LIS()+1);
}
printf("%d",ans);
return 0;
}

最新文章

  1. 游戏编程系列[1]--游戏编程中RPC协议的使用[2]--Aop PostSharp篇
  2. 原生js通过prottype写的一个简单拖拽
  3. spring mvc(2):请求地址映射(@RequestMapping)
  4. Atitit cnchar simp best list &#160;汉字简化方案 最简化汉字256个
  5. tz2txt的安装与使用
  6. wp8 入门到精通 动画
  7. JS之script标签
  8. 怎么给OCR文字识别软件重编文档页面号码
  9. angularJs--$apply和$watch,$digest方法的意思
  10. TXT四则运算计算器
  11. 一品楼论坛www.ep6.info一品楼论坛
  12. 枚举for/in
  13. 使用selenium webdriver+beautifulsoup+跳转frame,实现模拟点击网页下一页按钮,抓取网页数据
  14. 用ASP.NET Core 2.1 建立规范的 REST API -- HATEOAS
  15. 学习RenderScript,以此来修改LiveWallpaper
  16. Regularity criteria for NSE 6: $u_3,\p_3u_1,\p_3u_2$
  17. 基于STM32F429+HAL库编写的定时器主从门控模式级联输出固定个数PWM脉冲的程序
  18. Mysql 语句优化
  19. 在mysql数据库中创建Oracle数据库中的scott用户表
  20. Docker 安装MySQL5.7(三)

热门文章

  1. 【web框架】Django
  2. .net core 控制台程序使用依赖注入(Autofac)
  3. int.TryParse非预期执行引发的思考
  4. SQL中intersect、union、minus和except 运算符
  5. [转载]Scikit-learn介绍几种常用的特征选择方法
  6. Canvas转换为Blob对象并使用Ajax发送
  7. 在ubuntu上使用Virtual-Box安装Mininet
  8. Android ART介绍
  9. Java序列化与反序列化学习(二):序列化接口说明
  10. Java序列化与反序列化学习(一)