bzoj 3203 凸包+三分】的更多相关文章

题目大意 具体自己看吧link 读入n,D,表示n关 大概就是第i关有i只僵尸排成一队来打出题人 最前面那只是编号为\(i\)的僵尸,最后面的一只是编号为\(1\)的僵尸 最前面的僵尸离出题人\(X_i\)的距离,其它每只僵尸离前一只距离为固定值D 僵尸平均每秒1米,植物每秒攻击力\(y\) 植物连续攻击,可以当它激光,打死前一只瞬间就可以开始打后一只 对于每一关,我们要选择一个尽可能小的y,保证出题人不被打死 求y总和最小为多少 分析 我们考虑\(y\)要满足什么条件 首先要打死每只僵尸,极限…
题目大意 你要维护一个向量集合,支持以下操作: 1.插入一个向量(x,y) 2.删除插入的第i个向量 3.查询当前集合与(x,y)点积的最大值是多少.如果当前是空集输出0 分析 按时间线建线段树 大致同bzoj 3533 [Sdoi2014]向量集 同样的,我们不必要搞出包含询问所在时间点的所有向量再求凸包三分 一个时间点的答案就是它线段树上所有祖先的答案的最大值 复杂度一样是\(n\log^2n\) solution 没写 挖坑…
题目大意 维护一个向量集合,在线支持以下操作: "A x y (|x|,|y| < =10^8)":加入向量(x,y); "Q x y l r (|x|,|y| < =10^8,1 < =L < =R < =T,其中T为已经加入的向量个数)询问第L个到第R个加入的向量与向量(x,y)的点积的最大值. 集合初始时为空. 分析 题目中相当于给出一堆点\((z,w)\) 询问点\(x,y\) 求\(maximize(ans=xz+yw)\) \(\fr…
洛谷传送门 题目大意:太长略 每新加入一个僵尸,容易得到方程$ans[i]=max{\frac{sum_{i}-sum_{j-1}}{s_{i}+d(i-j)}}$ 即从头开始每一段僵尸都需要在规定距离内被消灭 展开式子,可得$ans[i]=max{\frac{sum_{i}-sum_{j-1}}{s_{i}+di-dj}}$ 是不是很像斜率的式子= = ----$(y2-y1)/(x2-x2)$ 维护一个下凸包,这次不是用直线去切凸包,而是把凸包上每个点都向一个定点去连直线,求最大的斜率 会发…
惊了,我怎么这么菜啊.. 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=3203 (luogu)https://www.luogu.org/problemnew/show/P3299 题解: 先讲正常做法. 设\(S_i\)为\(i\)的前缀和,则显然第\(i\)次答案为\(\max^i_{j=1} \frac{S_i-S_{j-1}}{x_i+id-jd}\) 那么很显然就是要求从一个点\((x_i+id,S_i)\)…
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=3203 题解 首先我们考虑对一大波僵尸来袭的情况进行分析 假设来袭的僵尸是\(\{ a_1,a_2,a_3,...,a_n\}\) 那么距离分别为\(\{dis,dis+d,dis+d*2,...,dis+d*(n-1)\}\) 那么我们知道,在这波僵尸中,我们应该取到的最小的攻击速度为 \(max{\frac{sum_i}{dis_i}}\) 其中\(sum_n = \sum_{i=1…
题目大意 两种操作 1)插入一个过原点的圆 2)询问一个点是否在所有的圆中 分析 在圆中则在半径范围内 设圆心 \(x,y\) 查询点\(x_0,y_0\) 则\(\sqrt{(x-x_0)^2+(y-y_0)^2} <= \sqrt{x^2+y^2}\) 解得\(2x_0 * x+2y_0 *y -(x_0^2+y_0^2)>=0\) x,y 为变量 是个半平面的式子 题意变成 1)插入一个点 2)询问是否所有点都在半平面内 插入互不干扰 点都在半平面内当且仅当凸包在半平面内 cdq,维护上…
题目链接 BZOJ3533 题解 我们设询问的向量为\((x_0,y_0)\),参与乘积的向量为\((x,y)\) 则有 \[ \begin{aligned} ans &= x_0x + y_0y \\ y &= -\frac{x_0}{y_0}x + \frac{ans}{y_0} \\ \end{aligned} \] 所以向量集里的向量实际上可以对应到平面上一组点,我们用一个斜率固定的直线去经过这些点,使得斜率最大或最小 当\(y_0 > 0\)时,要求截距最大 当\(y_0…
在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxhgww想从A点走到D点,他想知道最少需要走多长时间 Input输入数据第一行是4个整数,表示A和B的坐标,分别为Ax,Ay,Bx,By 第二行是4个整数,表示C和D的坐标,分别为Cx,Cy,Dx,Dy 第三行是3个整数,分别是P,Q,ROutput输出数据为一行,表示lxhgww从A点走到D点的最短时间,保留…
由于样例解释很清晰,所以很容易得到以下结论: 1.每一关都是独立的,且僵尸的相对位置不会变 2.每一关的攻击力=Max(sum(i)/dis(i)) 其实sum(i)是僵尸攻击力的前缀和,dis(i)是距离 然后因为输入是每次在队头添加,所以我们可以把前缀和转换成后缀和 攻击力=Max( (sum_i-sum_j)/(x_i+i*d-j*d) ) 这显然是一个斜率的式子,又因为僵尸的相对位置不变 所以我们可以维护一个下凸壳,之后每次在凸壳上三分最优解即可 #include<cstdio> #i…