题目描述:

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)$

代码:

  1. #include<cmath>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. const int N = ;
  7. const double Pi = acos(-1.0);
  8. const double eps = 1e-;
  9. int dcmp(double x)
  10. {
  11. if(fabs(x)<=eps)return ;
  12. return x>?:-;
  13. }
  14. template<typename T>
  15. inline void read(T&x)
  16. {
  17. T f = ,c = ;char ch=getchar();
  18. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  19. while(ch>=''&&ch<=''){c=c*+ch-'';ch=getchar();}
  20. x = f*c;
  21. }
  22. int n,x[N],y[N],tl,ans,t;
  23. struct node
  24. {
  25. double x,y;
  26. node(){}
  27. node(double x,double y):x(x),y(y){}
  28. bool operator < (const node&a)const{return dcmp(x-a.x)?dcmp(x-a.x)<:dcmp(y-a.y)<;}
  29. }p[N];
  30. double r,sta[N],s[N];
  31. void fix(double x)
  32. {
  33. int l = ,r = t,k = t;
  34. while(l<=r)
  35. {
  36. int mid = (l+r)>>;
  37. if(s[mid]>x)k=mid,r=mid-;
  38. else l=mid+;
  39. }
  40. s[k] = x;
  41. }
  42. void LIS()
  43. {
  44. t = ;
  45. for(int i=;i<=tl;i++)
  46. if(!t||sta[i]>s[t])s[++t]=sta[i];
  47. else fix(sta[i]);
  48. ans = max(ans,t);
  49. }
  50. int main()
  51. {
  52. // freopen("crazy.in", "r", stdin);
  53. // freopen("crazy.out", "w", stdout);
  54. // freopen("tt.in","r",stdin);
  55. read(n),read(r);
  56. for(int i=;i<=n;i++)
  57. {
  58. read(x[i]),read(y[i]);
  59. double bas = atan2(y[i],x[i]);
  60. double dlt = acos(r/sqrt(x[i]*x[i]+y[i]*y[i]));
  61. p[i].x = bas-dlt,p[i].y = bas+dlt;
  62. if(p[i].x<-Pi)p[i].x+=*Pi;
  63. if(p[i].y>Pi)p[i].y-=*Pi;
  64. if(p[i].x>p[i].y)swap(p[i].x,p[i].y);
  65. }
  66. sort(p+,p++n);
  67. for(int i=;i<=n;i++)
  68. {
  69. tl=;
  70. for(int j=i+;j<=n&&p[j].x<=p[i].y;j++)
  71. if(p[j].y>p[i].y)sta[++tl]=p[j].y;
  72. LIS();
  73. }
  74. printf("%d\n",ans+);
  75. return ;
  76. }

三倍经验——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. day8文件操作作业详解

    1.day8题目 1,有如下文件,a1.txt,里面的内容为: 老男孩是最好的培训机构, 全心全意为学生服务, 只为学生未来,不为牟利. 我说的都是真的.哈哈 分别完成以下的功能: a,将原文件全部读 ...

  2. Linux 添加硬盘并分区

    Linux 添加硬盘并分区 *********************** 1.fdisk /dev/sdb 2.m   //帮助 3.p   // p 列出分区表 4.q   //不保存退出: 5. ...

  3. [bzoj 1758] 重建计划

    bzoj 1758 重建计划 题意: 给定一棵有边权的树和两个数 \(L, R (L\leq R)\),求一条简单路径,使得这条路径经过的边数在 \(L, R\) 之间且路径经过的边的边权的平均值最大 ...

  4. Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) C

    Helen works in Metropolis airport. She is responsible for creating a departure schedule. There are n ...

  5. JavaScript引擎基本原理: 优化prototypes

    原文链接: JavaScript engine fundamentals: optimizing prototypes 这篇文章介绍了一些JavaScript引擎常用的优化关键点, 并不只是Bened ...

  6. HTML——表单

    总结: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  7. 044 Wildcard Matching 通配符匹配

    实现一个支持 '?' 和 '*' 的通配符匹配.'?' 匹配任何单个字符.'*' 匹配任何数量的字符 (包括0个).匹配应覆盖 整个 输入字符串(而不是部分).这个函数原型为:bool isMatch ...

  8. 算法导论课后习题解答 第一部分 练习1.1-1->1.1-5

    很高兴能和大家一起共同学习算法导论这本书.笔者将在业余时间把算法导论后面的题解以博文的形式展现出来希望能得到大家的支持谢谢.如果有可能我会做一些教学视频免费的供大家观看. 练习题选自算法导论中文第三版 ...

  9. spark 图文详解:资源调度和任务调度

    讲说spark的资源调度和任务调度,基本的spark术语,这里不再多说,懂的人都懂了... 按照数字顺序阅读,逐渐深入理解:以下所有截图均为个人上传,不知道为什么总是显示别人的QQ,好尴尬,无所谓啦, ...

  10. 机器学习框架ML.NET学习笔记【9】自动学习

    一.概述 本篇我们首先通过回归算法实现一个葡萄酒品质预测的程序,然后通过AutoML的方法再重新实现,通过对比两种实现方式来学习AutoML的应用. 首先数据集来自于竞赛网站kaggle.com的UC ...