嘟嘟嘟




离NOI最后一周,把自己容易忘的知识点和板子复习一下。

(刚答完loj的笔试模拟,感觉上不了90……)

update:哦,我89……




先把式子写出来,每一个妖怪的战斗力\(S(i) = A + \frac{a}{b}D +D +\frac{b}{a}A\)。

令\(k = \frac{a}{b}\),于是\(S(i) = D *k + A *\frac{1}{k} +A +D\)。

这东西是一个对勾函数,在第一象限是单峰的。我们要求的是一堆对勾函数的最大值的最小值。有一个结论是单峰函数复合起来还是单峰函数(但是我不会证啊),所以就可以三分了。




刚开始我直接傻呵呵的令\(L = 0, R = 1e10\),然后只得了10分。

应该把边界算准了:当\(D *k = A *\frac{1}{k}\)的时候,\(k = \sqrt{\frac{A}{D}}\),所以应该是\(1e-4 \sim 1e4\)。

然后面向数据编程,我三分了115次才过掉这道题……

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<cmath>
  5. #include<cstring>
  6. #include<cstdlib>
  7. #include<cctype>
  8. #include<queue>
  9. #include<vector>
  10. #include<ctime>
  11. #include<assert.h>
  12. using namespace std;
  13. #define enter puts("")
  14. #define space putchar(' ')
  15. #define Mem(a, x) memset(a, x, sizeof(a))
  16. #define In inline
  17. #define forE(i, x, y) for(int i = head[x], y; (y = e[i].to) && ~i; i = e[i].nxt)
  18. typedef long long ll;
  19. typedef double db;
  20. const db INF = 1e18;
  21. const db eps = 1e-10;
  22. const int maxn = 1e6 + 5;
  23. In ll read()
  24. {
  25. ll ans = 0;
  26. char ch = getchar(), las = ' ';
  27. while(!isdigit(ch)) las = ch, ch = getchar();
  28. while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
  29. if(las == '-') ans = -ans;
  30. return ans;
  31. }
  32. In void write(ll x)
  33. {
  34. if(x < 0) putchar('-'), x = -x;
  35. if(x >= 10) write(x / 10);
  36. putchar(x % 10 + '0');
  37. }
  38. In void MYFILE()
  39. {
  40. #ifndef mrclr
  41. freopen("monster.in", "r", stdin);
  42. freopen("ha.out", "w", stdout);
  43. #endif
  44. }
  45. int n;
  46. db A[maxn], D[maxn];
  47. In db calc(db x)
  48. {
  49. db ret = 0;
  50. for(int i = 1; i <= n; ++i) ret = max(ret, A[i] + D[i] + x * D[i] + 1.0 / x * A[i]);
  51. return ret;
  52. }
  53. int main()
  54. {
  55. // MYFILE();
  56. n = read();
  57. for(int i = 1; i <= n; ++i) A[i] = read(), D[i] = read();
  58. db L = 1e-4, R = 1e4;
  59. for(int i = 1; i <= 115; ++i)
  60. {
  61. db mid1 = (L + R) * 0.5, mid2 = (mid1 + R) * 0.5;
  62. if(calc(mid1) < calc(mid2)) R = mid2;
  63. else L = mid1;
  64. }
  65. printf("%.4lf\n", min(calc(L), calc(R)));
  66. return 0;
  67. }

[SCOI2016]妖怪的更多相关文章

  1. BZOJ4570: [Scoi2016]妖怪

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

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

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

  3. BZOJ 4570: [Scoi2016]妖怪

    二次联通门 : BZOJ 4570: [Scoi2016]妖怪 二次联通门 : luogu P3291 [SCOI2016]妖怪 LibreOJ : LibreOJ  #2015. 「SCOI2016 ...

  4. [BZOJ4570][SCOI2016]妖怪(凸包)

    两种做法,前一种会TLE. 第一种是高一数学题做法,设一个妖怪的atk和dnf分别为x和y,则它在(a,b)环境下的战斗力为x+y/a*b+y+x/a*b. 设t为b/a,则战斗力即$f(x,y,t) ...

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

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

  6. P3291 [SCOI2016]妖怪

    传送门 我数学的确白学了--这种题目竟然一点思路都没有-- 首先可以把每个妖怪看成二维平面上的一个点,那么每一个环境\((a,b)\)就可以看成一条斜率\(k=-\frac{b}{a}\)的过该点的直 ...

  7. 【BZOJ4570】 [Scoi2016]妖怪

    Description 邱老师是妖怪爱好者,他有n只妖怪,每只妖怪有攻击力atk和防御力dnf两种属性.邱老师立志成为妖怪大师,于 是他从真新镇出发,踏上未知的旅途,见识不同的风景.环境对妖怪的战斗力 ...

  8. 2018.10.15 bzoj4570: [Scoi2016]妖怪(凸包)

    传送门 不得不说这题有点东西啊. 看到题第一眼二分,用二次函数求范围来进行checkcheckcheck,20分滚粗了233. 于是开始思考正解. 发现可以把每只怪物的二元组属性看成二维坐标. 这时对 ...

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

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

随机推荐

  1. AS3.0频谱-01

    AS3.0频谱系列-01: package fengzi.spectrum { //import fengzi.colors.GetColor; import flash.display.Sprite ...

  2. windows10 iis浏览wcf报404.3错误

    报错:HTTP错误404.3-Not Found 由于扩展配置问题而无法提供您请求的页面.如果该页面是脚本,请添加处理程序.如果应下载文件,请添加MIME映射. 解决步骤如下: 控制面板->打开 ...

  3. RequestBody只能读取一次的问题

    一.为什么只能读一次 原因很简单:因为是流.想想看,java中的流也是只能读一次,因为读完之后,position就到末尾了. 二.解决办法 思路:第一次读的时候,把流数据暂存起来.后面需要的时候,直接 ...

  4. docker 容器和镜像常用命令整理

  5. Flutter Animation AnimatedBuilder

    Flutter AnimatedBuilder 创建动画的widget Key key, @required Listenable animation, @required this.builder, ...

  6. DDL 操作数据库

    DDL 操作数据库:常用的操作 CRUD 一.C(create)创建 1.创建数据库 create database 数据库名称; 2.创建数据库,判断是否存在,再创建(如果存在,就不再创建) cre ...

  7. SIM7000C TCP

    SIM7000C是基于高通MDM9206平台开发LTE CAT M1(eMTC) 和NB-IoT模块,能支持LTETDD/LTE-FDD/GSM/GPRS/EDGE多个频段,上下行数据流量峰值达到37 ...

  8. O - Can you find it?(二分查找)

    O - Can you find it? Time Limit:3000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64 ...

  9. 浅谈 form 表单提交

    原创文章,转载请注明出处:http://www.cnblogs.com/weix-l/p/7675230.html 若有错误,请评论指出,谢谢! Form 对象代表一个 HTML 表单.在 HTML ...

  10. 【JUC】6.线程池—ThreadPoolExecutor

    创建线程池可以分为三种方式: 1. 通过ThreadPoolExecutor的构造方法,创建ThreadPoolExecutor的对象,即一个线程池对象: 此构造方法,一共7个参数,5个必须参数,2个 ...