题意 题目链接 Sol 暴力做法是\(O(n^3)\)枚举三个点然后check一下是否能包含所有点 考虑一种随机算法,首先把序列random_shuffle一下. 然后我们枚举一个点\(i\),并维护一个当前的圆. 再枚举一个点\(j\),如果该点在圆内继续,否则用\(i, j\)构造出的圆替换出之前的圆. 再枚举一个点\(k\),如果该点在圆内继续,否则用\(i, j, k\)构造出一个新的圆. 这样的期望复杂度是O(n)的(不会证) 一开始我以为这样做的正确性有点问题,也就是说可能找到一个不…
bzoj1337 洛谷P1742 用随机增量法.讲解:https://blog.csdn.net/jokerwyt/article/details/79221345 设点集A的最小覆盖圆为g(A) 可以发现:1.g(A)是唯一的2.g(A)可以由<=3个点唯一确定①由一个点确定(所有点重合时)②由两个点确定(圆直径必定为两点连线)③由三个点确定(圆必定是过三点的唯一圆) 把A中在g(A)上的点叫做关键点可以发现:若点b不在g(A)内(b不属于A),则b是g(A+b)的关键点证明:如果b不是g(A…
题目链接:P1742 最小圆覆盖 题意 给出 N 个点,求最小的包含所有点的圆. 思路 随机增量 最小圆覆盖一般有两种做法:随机增量和模拟退火.随机增量的精确度更高,这里介绍随机增量的做法. 先将所有点随机打乱. 令前 \(i - 1\) 个点的最小覆盖圆为圆 \(O\),加入第 \(i\) 个点. 如果第 \(i\) 个点在圆 \(O\) 内或圆 \(O\) 上,则前 \(i\) 个点的最小覆盖圆还是圆 \(O\). 否则新得到的最小覆盖圆肯定经过第 \(i\) 个点.然后确定前 \(i −…
题面 传送门 题解 之前只是在抄题解--这篇才算是真正自己想的吧-- 首先我们把输入序列给\(random\)一下防止出题人好心送你一个毒瘤序列 我们设\(r\)为当前最大半径,\(o\)为此时对应圆心 先说一下算法过程: 令前\(i-1\)个点的最小覆盖圆为\((o,r)\) 如果第\(i\)个点在这个圆中,直接跳过 如果不在,那么第\(i\)个点一定在前\(i\)个点的最小覆盖圆上,此时前\(i-1\)个点中还有两个也在最小覆盖圆上.那么我们设\(o=p_i,r=0\),做固定了第\(i\)…
题意:给定N个点,求最小圆覆盖的圆心喝半径.保留10位小数点. N<1e5: 思路:因为精度要求较高,而且N比较大,所以三分套三分的复杂度耶比较高,而且容易出错. 然是写下增量法吧. 伪代码加深记忆: 圆 C; to n) { if(P[i] 不在 C 内) { C = {P[i], }; to i-) { if(P[j] 不在 C 内) { C = {0.5*(P[i]+P[j]), 0.5*dist(P[i], P[j])}; to j-) { if(P[k] 不在 C 内) { C = 外…
洛谷题目传送门 CF题目传送门 对于这题,我无力吐槽. 虽然式子还是不难想,做法也随便口胡,但是一些鬼畜边界情况就是判不对. 首先显然二分答案. 对于每一个雨滴,它出现的时刻我们的绳子必须落在它上面.把绳子的上下端点用二元组\((a,b)\)表示,因为三个点\((a,0)(x_i,y_i)(b,h)\)共线,我们可以推出 \[(b-a,h)×(x_i-a,y_i)=0\\(h-y_i)a+y_ib-x_ih=0\] 这说明了\(a,b\)的关系,必须落在一条直线上!它在\((0,0)(0,w)(…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - CodeVS1904 题目传送门 - 洛谷2764 题意概括 给出一个有向无环图,现在请你求一些路径,这些路径覆盖且仅覆盖所有的点一次. 现在让你求最少要几条路径. CodeVS1904 - 只需要输出几条边 洛谷2764 - 先输出路径,再输出几条.(但是截止2017-08-11,还没有SPJ) 题解 话说我这一题一开始在洛谷做,由于没有SPJ,多次爆零,据说在洛谷的那个数据只有网络流可以做?匈牙利挂了(…
洛谷题目传送门 设抛物线方程为\(y=ax^2+bx(a<0,b>0)\),我们想要求出一组\(a,b\)使得它尽可能满足更多的要求.这个显然可以二分答案. 如何check当前的\(mid\)是否合法呢?每一个限制条件形如\(y_{i_1}\le ax_i^2+bx_i\le y_{i_2}\),也就是\(\frac{y_{i_1}}{x_i}\le x_ia+b\le \frac{y_{i_2}}{x_i}\).把\(a,b\)看成自变量,实际上每个不等式就是一个半平面,我们需要求出半平面交…
体验过\(O(n^3)\)过\(10^5\)吗?快来体验一波当\(wys\)的快感吧\(QAQ\) 前置芝士1:二元一次方程组求解 设 \[\begin{cases}a1 * x + b1*y=c1\\a2 * x + b2*y=c2\end{cases}\] (其中\(a1,a2,b1,b2,c1,c2\)为已知量) 由\(②\)式得: \[x=\frac{c2-b2*y}{a2}\] 带入\(①\)式并化简得: \[y=\frac{c1-\frac{a1*c2}{a2}}{b1-\frac{…
有向无环图的最小路径点覆盖 最小路径覆盖就是给定一张DAG,要求用尽量少的不相交的简单路径,覆盖有向无环图的所有顶点. 有定理:顶点数-路径数=被覆盖的边数. 要理解的话可以从两个方向: 假设DAG已经被n条路径覆盖,那么任意一条路径又有 顶点数-1=边数.那么对所有路径等式两边求和,每条路径的顶点数之和=所有点数,-1的和=路径数,每条路径的边数之和=被覆盖的边数..这样上面的定理就成立了. 还有一种方法,我们要先引入二分图 我们把原图中的点拆成出点(边从该点出)和入点(边从该点入),即原图点…