二次联通门 : BZOJ 4570: [Scoi2016]妖怪

二次联通门 : luogu P3291 [SCOI2016]妖怪

LibreOJ : LibreOJ  #2015. 「SCOI2016」妖怪

  1. /*
  2. BZOJ 4570: [Scoi2016]妖怪
  3.  
  4. 凸包
  5.  
  6. 我果然还是naive
  7. 看见这题就想二分
  8. 结果惨挂
  9.  
  10. 做了凸包后就想三分
  11. 又挂了。。
  12.  
  13. 完美落入了每个坑。。果然还是自己太菜
  14.  
  15. 对于每个妖怪,其在(a,b)时的最大战力为过当前点斜率为(-b/a)的直线的截距之和
  16. 最大的战力就是最外面的那条直线
  17.  
  18. 对n个点做一个上凸包
  19. 最大值一定在凸包的右上部分(自行脑补)
  20.  
  21. 那么这些点的斜率都有着一个范围ki-1<ki<ki+1
  22.  
  23. 那么战力就变为了一个双钩函数
  24. 讨论求最值即可
  25. */
  26. #include <algorithm>
  27. #include <iostream>
  28. #include <cstdio>
  29. #include <cmath>
  30.  
  31. void read (long long &now)
  32. {
  33. register char word = getchar ();
  34. int temp = ;
  35. for (now = ; !isdigit (word); word = getchar ())
  36. if (word == '-')
  37. temp = ;
  38. for (; isdigit (word); now = now * + word - '', word = getchar ());
  39. if (temp)
  40. now = -now;
  41. }
  42.  
  43. #define INF 1e9
  44.  
  45. struct Point
  46. {
  47. long long x, y;
  48.  
  49. Point (long long __x, long long __y) : x (__x), y (__y) {}
  50. Point () {}
  51.  
  52. bool operator < (const Point &now) const
  53. {
  54. return this->x == now.x ? this->y < now.y : this->x < now.x;
  55. }
  56.  
  57. Point operator - (const Point &now) const
  58. {
  59. return Point (this->x - now.x, this->y - now.y);
  60. }
  61. };
  62.  
  63. inline long long Cross (const Point &A, const Point &B)
  64. {
  65. return A.x * B.y - A.y * B.x;
  66. }
  67.  
  68. #define Max 1000250
  69.  
  70. inline double Calculate (const Point &now, const double &k)
  71. {
  72. return k >= ? INF : (double) now.x + now.y + - k * now.x - now.y / k;
  73. }
  74.  
  75. inline double Get_point_k (const Point &now)
  76. {
  77. return -sqrt ((double) now.y / now.x);
  78. }
  79.  
  80. inline double Get_line_k (const Point &A, const Point &B)
  81. {
  82. return (A.x ^ B.x) ? ((double)(A.y - B.y) / (double) (A.x - B.x)) : INF;
  83. }
  84.  
  85. int Get_convex_Hull (Point *point, int N, Point *Stack)
  86. {
  87. std :: sort (point + , point + N + );
  88.  
  89. register int top = ;
  90. for (int i = ; i <= N; ++ i)
  91. {
  92. for (; top > && Cross (Stack[top] - Stack[top - ], point[i] - Stack[top - ]) >= ; -- top);
  93. Stack[++ top] = point[i];
  94. }
  95. return top;
  96. }
  97.  
  98. Point yukari[Max], Stack[Max];
  99.  
  100. int main (int argc, char *argv[])
  101. {
  102. register int i;
  103. int N;
  104. scanf ("%d", &N);
  105. for (i = ; i <= N; ++ i)
  106. read (yukari[i].x), read (yukari[i].y);
  107.  
  108. int M = Get_convex_Hull (yukari, N, Stack);
  109.  
  110. if (M < )
  111. {
  112. printf ("%.4lf", Calculate (Stack[], Get_point_k (Stack[])));
  113. return ;
  114. }
  115. double k, _k, __k, Answer = INF;
  116.  
  117. k = Get_point_k (Stack[]);
  118. __k = Get_line_k (Stack[], Stack[]);
  119.  
  120. if (k >= __k)
  121. Answer = std :: min (Answer, Calculate (Stack[], k));
  122.  
  123. k = Get_point_k (Stack[M]);
  124. _k = Get_line_k (Stack[M - ], Stack[M]);
  125.  
  126. if (k <= _k)
  127. Answer = std :: min (Answer, Calculate (Stack[M], k));
  128. Answer = std :: min (Answer, Calculate (Stack[M], _k));
  129.  
  130. for (i = ; i < M; ++ i)
  131. {
  132. _k = Get_line_k (Stack[i - ], Stack[i]);
  133. __k = Get_line_k (Stack[i], Stack[i + ]);
  134.  
  135. k = Get_point_k (Stack[i]);
  136.  
  137. Answer = std :: min (Answer, Calculate (Stack[i], _k));
  138. if (k <= _k && k >= __k)
  139. Answer = std :: min (Answer, Calculate (Stack[i], k));
  140. }
  141. printf ("%.4lf", Answer);
  142. return ;
  143. }

BZOJ 4570: [Scoi2016]妖怪的更多相关文章

  1. bzoj 4570: [Scoi2016]妖怪 凸包

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=4570 题解 我们知道如果一个怪物要取到攻击力的最大值,那么一定是把防御力都转化了 所以我 ...

  2. BZOJ4570: [Scoi2016]妖怪

    题目传送门 4570: [Scoi2016]妖怪 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 491 Solved: 125 [Submit][Sta ...

  3. [Bzoj4570][Scoi2016]妖怪(右上凸包)

    4570: [Scoi2016]妖怪 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1110  Solved: 336[Submit][Status][ ...

  4. bzoj 4570 妖怪

    bzoj 4570 妖怪 正解应该是 \(O(nlogn)\) 的凸包,但被我的 \(O(100n)\) 的三分水过去了. 记 $x=\frac b a $ ,显然有 \(strength_i=ATK ...

  5. BZOJ 4571: [Scoi2016]美味

    二次联通门 : BZOJ 4571: [Scoi2016]美味 /* BZOJ 4571: [Scoi2016]美味 dalao们都在说这题如果没有加法balabala就可以用可持久化trie解决了 ...

  6. 【BZOJ 4570】【SCOI 2016】妖怪

    http://www.lydsy.com/JudgeOnline/problem.php?id=4570 对于每个妖怪的两个值,看成二位平面上的一个点的横纵坐标(x,y). 因为只关心a/b,所以设经 ...

  7. BZOJ4570:[SCOI2016]妖怪——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4570 邱老师是妖怪爱好者,他有n只妖怪,每只妖怪有攻击力atk和防御力dnf两种属性.邱老师立志成 ...

  8. BZOJ 4568: [Scoi2016]幸运数字 [线性基 倍增]

    4568: [Scoi2016]幸运数字 题意:一颗带点权的树,求树上两点间异或值最大子集的异或值 显然要用线性基 可以用倍增的思想,维护每个点向上\(2^j\)个祖先这些点的线性基,求lca的时候合 ...

  9. bzoj 4571: [Scoi2016]美味 (主席树)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4571 题面; 4571: [Scoi2016]美味 Time Limit: 30 Sec   ...

随机推荐

  1. Docker 学习笔记(一):基础命令

    仅为个人查阅使用,要学习 Docker 的话,推荐看这份文档:<Docker - 从入门到实践> P.S. 大多数的 docker container xxx/docker image x ...

  2. javascript之instanceof

    定义和用法 instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上. 语法: object instanceof construct ...

  3. Python Unittest进行接口测试的简单示例

    今年肯定是要把Python学到一定程度的,否则感觉自己混不下去了,那就开始半挣扎的咸鱼生活吧. ---------------------------------------------------- ...

  4. webstorm处理代码冲突

     出现这个冲突界面后,不要关闭弹窗,不然会把冲突更新下来,也不要点merge. 正确做法:双击文件开始解决冲突!!!!

  5. J.U.C之AQS:CLH同步队列

    此篇博客所有源码均来自JDK 1.8 在上篇博客[死磕Java并发]—–J.U.C之AQS:AQS简介中提到了AQS内部维护着一个FIFO队列,该队列就是CLH同步队列. CLH同步队列是一个FIFO ...

  6. 学习到目前,自己封装的db类和pdo类

    DB封装类 <?php class DBDA { public $host = "localhost"; public $uid = "root"; pu ...

  7. cdc跨时钟域处理-结绳握手法

    参考文档 https://blog.csdn.net/u011412586/article/details/10009761 前言 对于信号需要跨时钟域处理而言,最重要的就是确保数据能稳定的传送到采样 ...

  8. 如何11 周打造全能Python工程师!

    在这个大数据和人工智能的时代,不管你是编程初学者,还是想学习一门其他语言充实自己,Python都是最好的选择之一. 它简洁.优雅.易学,被越来越多的大学作为计算机新生的入门语言: 它是大数据和人工智能 ...

  9. TLS之殇如何把我逼上绝望

    1.协议的形式化分析,前提是弄清楚协议结构和协议参与者之间的会话交互,以及会话之间使用的加解密算法,签名算法,认证算法,等牵扯的算法.之后便是将要分析的协议部分进行抽象化,具体抽象涉及协议参与者(发起 ...

  10. springboot Properties加载顺序源码分析

    关于properties: 在spring框架中properties为Environment对象重要组成部分, springboot有如下几种种方式注入(优先级从高到低): 1.命令行 java -j ...