【随机算法】
张松超
这个作者很懒,什么都没留下…
展开
-
CodeForces ~ 996E ~ Leaving the Bar (贪心 + 随机化)
题意给你n个向量,你可以改变他们的符号,使得这些向量之和的长度小于1.5e6。思路由于每个向量的模小于r=106r=106r=10^6,我们可以通过调整符号使得两个向量之和的模小于等于2–√∗r≤1.5e62∗r≤1.5e6\sqrt{2}*r≤1.5e6。证明如下: 已知|a|≤r,|b|≤r,假设夹角为Θ,|a−b|2=|a|2+|b|2−2∗|a|∗|b|∗cosΘ已知...原创 2018-06-26 17:56:26 · 665 阅读 · 0 评论 -
POJ ~ 2454 ~ Jersey Politics (贪心 + 随机化算法)
题意:给你k,然后给你3*k个数编号为(1~3*k),将它们分成三分,每份k个数,要求至少有两份之和大于500*k,输出他们的编号,前两份的和大于500*k。思路:玄学题+1!我们肯定挑选最大的2*k个数字,然后对他们进行合理的分配使得两份都大于500*k。随机第一份中的一个位置,随机第二份中的一个位置,然后交换他们,直到两份之和都满足要求。直接DFS+剪枝超时。//#include <bi...原创 2018-04-18 17:22:13 · 679 阅读 · 0 评论 -
POJ ~ 3318 ~ Matrix Multiplication (随机化算法)
题意:给你A,B,C三个矩阵,问A*B==C? n^3会超时。思路:玄学题?计算C矩阵中一个点的值的复杂度为O(N),所以我们随机一个C矩阵中的点,然后计算该位置的值,如果和C矩阵不一样,那么证明不等。多进行几次,正确率会随着计算次数的增加而增加。N=500,那么最多进行1e6次左右,挑一个比较大点的数字,挑选一个吉利数字进行尝试,多交几发就过了。同类型的题POJ2454//#include &l...原创 2018-04-18 16:50:48 · 219 阅读 · 0 评论