zoukankan      html  css  js  c++  java
  • Comet OJ

    Comet OJ - Contest #2 简要题解

    cometoj

    A

    模拟,复杂度是对数级的。
    code

    B

    首先易知(pin[l,r]),且最终的利润关于(p)的表达式为(frac{(p-l)(frac{L+R}{2}-p)}{r-l}),二次函数求最值即可。
    code

    C

    枚举独立集点数即可。(sum_{i=0}^ninom nip^{inom i2})
    code

    D

    树上的任意一个满足(|S|ge2)的点集(S)均有一个唯一的中心,即直径的中点(可能是一个点也可能是一条边),因此可以在该点集的中心处计算该点集的贡献。
    枚举中心(i),枚举直径长度(j),要求在(i)点至少两棵不同子树里选与(i)距离恰好为(j)的点,距离小于(j)的点任选。复杂度(O(n^2))
    code

    E

    原图是一片环套树森林。首先考虑把森林缩掉,对于一个叶子节点(v)与其父亲(u),可以令(p_ugets p_u+(1-p_u)p_vs_v),并删除点(v)。如此操作后图中就只剩下若干个环了。
    对于环上的任意一点计算答案,可以先把这个点的出边断掉,再视作一条链暴力计算,复杂度(O(n^2))。考虑当前一个人以(x)的概率醒来的时候,后一个人醒来的概率可以表示成(ax+b)的形式,其中(a,b)均为只与当前这个人有关的常量。不难发现这种运算满足结合率,因此对环维护前后缀,每次(O(1))合并答案即可,复杂度(O(n))
    比赛的时候无脑上了棵线段树,做法上没有本质区别。code

    F

    被修修教育了。。。
    我们要求对于每个(i),将第(i)个二项式除去后与(a_i)点乘的结果。

    考虑分治。设$$L(x)=prod_{i=1}^{n/2}(p_ix+1-p_i)=sum_{i=0}^{n/2}l_ix^iR(x)=prod_{i=n/2+1}^{n}(p_ix+1-p_i)=sum_{i=0}^{n-n/2}r_ix^i$$

    假设我们要求(iin[0,n/2])的答案,由于最终答案一定是(sum_{j=0}^{n/2-1}sum_{k=0}^{n-n/2}l'_jr_ka_{j+k})的形式,而(r_k)对于左边的所有(i)都是定值,因此可以考虑令(a'_j=sum_{k=0}^{n-n/2}r_ka_{j+k})然后用新的(a')递归左边,右边同理。

    这样就只需要在每层分治时做两次卷积就好了,复杂度仍然是(O(nlog^2n)),不过常数优秀不少。

    code


    以下是原题解。

    orz suika
    先求出(F(x)=prod_{i=1}^n(p_ix+1-p_i)),然后对于每个(i),计算(frac{F(x)}{p_ix+1-p_i})(a_i)数组点乘的结果。

    为了方便处理,我们令(w_i=frac{1-p_i}{p_i})(题目保证(p_iin(0,1])),于是(F(x)=prod_{i=1}^np_i(x+w_i))。由于(prod_{i=1}^np_i)是常数,故下文中均将其忽略。

    不难发现问题大致是个退背包的模型,即先往背包里加入(n)个物品,然后每次删去一个。

    假设当前求的是第(k)个物品的答案,考虑设$$F(x)=prod_{i=1}^n(x+w_i)=sum_{i=0}^nf_ix^iG(x)=prod_{i=1,i eq k}^n(x+w_i)=sum_{i=0}^{n-1}g_ix^i$$
    那么就有递推式

    [g_i=f_{i+1}-g_{i+1}w_k(0le i<n,g_n=0) ]

    将这个递推式暴力展开

    [g_i=sum_{j=0}^{n-1-i}(-w_k)^jf_{i+j+1} ]

    于是我们要求的东西就变成了

    [ans_k=sum_{i=0}^{n-1}a_ig_i=sum_{i=0}^{n-1}a_isum_{j=0}^{n-1-i}(-w_k)^jf_{i+j+1}\=sum_{j=0}^{n-1}(-w_k)^jsum_{i=0}^{n-1-j}a_if_{i+j+1} ]

    (coef_j=sum_{i=0}^{n-1-j}a_if_{i+j+1}),则(ans_k=sum_{j=0}^{n-1}coef_j(-w_k)^j),多项式多点求值即可。求(coef_j)的过程只需要一个卷积,因此总复杂度(O(nlog^2n))
    code

  • 相关阅读:
    C# 使用 sid 连接 Oracle(无需安装 Oracle 客户端)
    命令模式(Command Pattern)
    仅仅使用Google就完成了人生第一次破解
    GeoServer跨域问题
    List与DataTable相互转换
    GeoServer2.14.1修改端口
    坐标转换C#(Gcj02、wgs84、bd09互转)
    nginx启动报错(1113: No mapping for the Unicode character exists in the target multi-byte code page)
    C# 操作 Mongodb
    DocumentFormat.OpenXml导出word合并(文件被另一个进程占用)
  • 原文地址:https://www.cnblogs.com/zhoushuyu/p/10777808.html
Copyright © 2011-2022 走看看