zoukankan      html  css  js  c++  java
  • Google Code Jam 2021 Round1A 题解

    Append Sort

    贪心。对于(i ge 2),每次将(s_i)修改成所有满足条件的数中最小的那个。

    不妨将(s_i)看成字符串。

    如果(s_i)(s_{i - 1})的前缀,那么一个可能的解是(t = str(int(s_{i - 1}) +1)),或者不断补0直至(len(s_i) = len(s_{i - 1}) + 1)。前者若可行则会更优。前者可行的条件为(s_i)(t)的前缀。

    如果(s_{i - 1} < s_i),不断补0直至长度相等。

    否则,不断补0直至(len(s_i) = len(s_{i - 1}) + 1)

    Prime Time

    Test Set 1

    (sum_i N_i)很小,可以直接暴力枚举。

    (SUM)为集合1的和,(MUL)为集合2的乘积。

    假设一开始所有数都属于集合1,不断尝试将集合1中的某个数移到集合2。

    Test Set 2

    由于(SUM)至多为(499 imes 100),所以可行的(MUL)也至多为这个数,差不多在(2^{16})左右。所以还是可以暴力枚举判断,只需要加加剪枝就可以了。

    枚举过程中,若(MUL > SUM),则后续的枚举就可以剪掉。

    Test Set 3

    现在(SUM)至多为(499 imes 10^{15}),差不多在(2^{60})左右,暴力枚举已经不太行了。

    可以推出集合2中至多有60个元素,由此可以推出集合2中的元素之和有一个非常宽松的上界(499 imes 60 = 29940),这又可以推导出可能的(SUM)至多有(29940)个。

    枚举所有可能的(SUM),若可行,则(MUL = SUM),对(MUL)进行质因数分解,在判断是否可行就可以了。由于(MUL)可能的质因数为输入的素数,所以这里质因数分解其实挺快的。

    Hacked Exam

    Test Set 1

    无脑暴力。

    Test Set 2

    n=1

    (p_i)表示第(i)道题,答案和学生1相同的概率,那么若(p_i ge frac{1}{2}),第(i)道题就和学生1填一样的,反之填和学生1相反的。

    (q)道题中有(score_1)道题是对的,共(C_{q}^{score_1})种方法。

    如果学生1第(i)道题是对的,那么现在就是(q - 1)道题种,有(score_1 - 1)道题是对的,共(C_{q - 1}^{score_1 - 1})种方法。即:

    [p_i = frac{C_{q - 1}^{score_1 - 1}}{C_{q}^{score_1}} = frac{score_1}{q}。 ]

    n=2​

    可以用动态规划(记忆化搜索)做。

    (p_i)表示第(i)道题,答案为T的概率。

    (f(s_1, s_2, i))为仅考虑第(i)道以及之后的问题,且满足此时学生1的分数为(s_1),学生2的分数为(s_2),的方法数。

    那么(f(s_1, s_2, i) = f(s_1 - g(1, i, T), s2 - g_2(i, T),i + 1) + f(s_1 - g(1, i, F), s_2 - g(2, i, F), i + 1))

    其中,(g(a, b, c))表示若正确答案为(c),第(a)个学生第(b)道题的得分。

    那么,第(1)道题的答案为T的概率就是

    [p_1 = frac {f(s_1 - g(1, 1, T), s_2 - g(2, 1, T), 2)} {f(s_1, s_2, 1)}。 ]

    时间复杂度为(O(Q^3))

    由于问题的顺序并不会影响最终的结果,所以可以每次将题目(i)移动到第1个位置,然后跑出(p_i)。这样子的时间复杂度为(O(Q^4))

    其实对于所有学生1给出答案T,学生2给出答案T的题目,这些题目其实是等价的,同理可以类推,一共有(4)种类型的题目(TT,TF,FT,FF)。每种类型跑一遍记录下来就可以了,没有必要跑多次。这样子的时间复杂度为(O(Q^3))

    其实,(P_{TT} = 1 - P_{FF}, P_{TF} = 1 - P_{FT}),所以也可以只跑(P_{TT}, P_{TF}),再去推(P_{FF}, P_{FT})

    Test Set 3

    TO BE SOLVED.

  • 相关阅读:
    【手把手教你】win10 虚拟机 VMware Workstation Pro 15下安装Ubuntu 19.04
    虚拟机 VMware Workstation Pro 15.5.0 及永久激活密钥
    MATLAB 之MATLAB2016b 安装破解教程
    ubuntu 下 使用GTK+、sqlite3、c语言的学生系统
    drf 之序列化器-Serializer
    Element UI 中scope用法
    vue使用Element UI案例(商品列表)
    Django Rest_Framework(drf)介绍,以及安装和配置
    drf 准备知识(Web应用模式、 api接口、RESTful API规范和序列化)
    vue客户端项目的基本搭建以及ElementUI
  • 原文地址:https://www.cnblogs.com/zengzk/p/14641550.html
Copyright © 2011-2022 走看看