【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;
}

转载于:https://www.cnblogs.com/CQzhangyu/p/7670028.html

【BZOJ4660】Crazy Rabbit 结论+DP相关推荐

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

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

  2. bzoj3663/4660CrazyRabbit bzoj4206最大团

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

  3. 关于dpi、dp与sp的基础了解

    做android开发还有面试的时候经验会遇到屏幕适配问题,Android由于机型太多,所以导致屏幕尺寸还有分辨率多样化.接下来讲解下DP.DPI.SP的概念,有些不对的地方欢迎指正 引用Andorid ...

  4. LeetCode DP基础

    简单DP lc.509 斐波那契 滑动窗口 class Solution {public:int fib(int n) {int a = 0 , b = 1 , c ;if(n == 0) retur ...

  5. GDKOI 2016 总结

    前言 这是第一次去GDKOI,本着锻(bei)炼(nue)的心态出来见世面.但是自从去年参加GDOI去打酱油连奖都没拿被虐飞(悲伤的故事),我就决定要尽自己所能把比赛做好.可是紧接着的NOIP又是一个 ...

  6. noip2017考前整理(未完)

    快考试了,把我以前写过的题回顾一下. Noip2007 树网的核:floyd,推出性质,暴力. Noip2008 笨小猴:模拟 Noip2008 火柴棒等式:枚举 Noip2008 传纸条:棋盘dp ...

  7. LeetCode-91.解码方法

    一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数. 示例 1 ...

  8. Educational Codeforces Round 141 (Rated for Div. 2) 赛时口胡思路(青大acmer训练日常)小上一波分

    我的主页 A. Make it Beautiful 题意是是否能够重排序列满足aiaiai不等于前i-1个数的和.赛时思路,当时读题看花眼了好几次,好不容易读懂题,脑子手玩时发现只有第一项和第二项才会 ...

  9. unity3d 取锚点位置_怎么才是理想的点茶奶茶加盟店址呢?

    CRAZY RABBIT 理 选 想 址 点茶 如何选择 前 言 奶茶店,已经连续几年成为年轻人创业投资的选择,很多人也动了开一家点茶加盟店的心思.大家都知道由于奶茶加盟店的特点店面位置非常重要,那怎 ...

最新文章

  1. Python中遍历字符串和字典
  2. 新趋势:数据驱动的销售
  3. 视频专辑:轻松学习flash动画制作视频教程
  4. 【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
  5. Regular expressions in lexing and parsing(翻译)
  6. 【报告分享】2021年中国企业直播成长路径研究报告.pdf(附下载链接)
  7. 用WSL安装Docker镜像
  8. php admin_priv,ECshop后台开发模块步骤
  9. oracle 模拟 mysql,mysql通过表和function模拟oracle的sequence
  10. 2019第十届蓝桥杯国赛c++B组真题
  11. Python学习笔记(7)文件读写2 Numpy
  12. 【python教程入门学习】Python字典及基本操作(超级详细)
  13. Mac浏览器提示安装证书错误,如何修复 Mac 上的无效证书错误
  14. ERROR: sdl2 requested but not found
  15. 阿里云产品试用更新,产品组合试用装更划算,快来免费上云吧
  16. python Numpy模块汇总(字母排序) 备注:内容很多,用control/command(Mac系统)+ F可以在网页内关键词查找,希望你能找到想要的内容
  17. qt快速读取excel
  18. 拼多多活动期间流量布局-四川万顿思
  19. mysql餐馆点餐系统_课内资源 - 基于Jsp和MySql的餐厅点餐系统
  20. 晋升项目经理一个月,我想离职.........

热门文章

  1. io 错误: socket closed_Tomcat NIO(9)IO线程Overall流程和关键类
  2. JavaScript数据类型之数据类型之间的转换(6)
  3. 集训8.16最小生成树讲解
  4. OpenGL基础16:视角
  5. OpenGL基础3:渲染管线
  6. 域名系统(DNS)概述
  7. 基类与派生类的类型转换
  8. 猜年龄 蓝桥 填空题2013省赛
  9. aiohttp进阶教程
  10. matlab2c使用c++实现matlab函数系列教程-factorial函数