• 简单随机化


    有一个挺不错的 随机化blog


    CodeChef - MSTONES

    平面上有 (n) 个点 ((x_i, y_i)) ,保证这 (n) 个点可以用 (7) 条直线覆盖。找出一条直线使得它覆盖的点最多

    (30) 组 Test

    (nleq10^4; |x_i|, |y_i|leq1.5 imes10^4)

    每次随机找两个点 (A, B) ,判断它们所在的直线所覆盖的点数,找到答案的概率为 (frac{1}{k^2}(k=7)) ,时间复杂度 (O(Tnk^2))

    也有一个确定性算法:当 (n<k^2) 时暴力,当 (nge k^2) 时可以发现题目给定的 (k) 条直线点数一定大于等于 (k) ,故可以固定一个点,找到覆盖它的直线的点数最大值(可以按斜率考虑),若大于等于 (k) 则删掉这些点递归,时间复杂度 (O(Tknlog n))


    杂题

    给定一个 (n imes m) 的矩形,每个点有一种颜色 (a_{i, j}) ,你可以从 ((1, 1)) 出发,每次走到与它四连通的格子上,问至少经过 (k) 种颜色最少需要走多少步

    (n, mleq30; kleq7; a_{i, j}in[1, 1000])

    每次给每种颜色赋一个 ([1, k]) 的权值,将原矩形看做只有 (k) 种颜色,然后状压bfs,每次结果为正确答案的概率为 (frac{k!}{k^k})

    时间复杂度 (O(Tnm2^k))


    杂题

    给定一个 (n imes m) 的矩形,每个位置有一个权值 (a_{i, j}) 和一个颜色 (c_{i, j}) ,找一个四连通块使得包含了至少 (k) 种颜色并且权值和最小

    (n, mleq15; kleq7; a_{i, j}in[1, 10^5])

    如上随机化赋值,问题转化为了求斯坦纳树,时间复杂度 (O(T(nm3^k+operatorname{spfa}(nm, nm)2^k)))

  • 相关阅读:
    同花顺笔试碰到的一道前端编程题
    闭包会造成内存泄漏吗?
    动态添加和删除节点元素,函数封装
    58同城2018校招前端笔试题总结
    拼多多2018提前批前端笔试总结
    根据字符串字符的个数排序输出
    ES6数组对象新增方法
    【转】浅析BFC及其作用
    《具体数学》学习笔记
    KMP总结
  • 原文地址:https://www.cnblogs.com/Juanzhang/p/11746893.html
Copyright © 2020-2023  润新知