• PKUSC2018题解


    PKUSC2018题解

    真实排名

    分别考虑第(i)个人翻倍和不翻倍的情况,组合数算一下即可,务必注意实现细节。

    代码

    最大前缀和

    (sum_s)表示集合(sum_{iin s} a_i)(f_s)表示最大前缀和等于(sum_s)的方案数,(g_s)表示选出集合(s)排成的最大前缀和均不大于(0)的方案数。
    因为最终的答案肯定是最大前缀和所在的位置(pos)后面一定不存在有一段前缀和大于(0),否则向后更新还可以更优。
    令全集为(U)那么

    [Ans=sum_{Ssubseteq U} sum_S imes f_S imes g_{complement_U S} ]

    现在主要是考虑如何求(f,g)

    考虑主动转移,由后往前插入数字(i),那么(f_S ightarrow f_{Scup {i}},sum_S>0),因为这样的话从i向后选一定会更优;(g)的转移比较简单,就是(g_S ightarrow g_{Scup {i}},sum_{Scup{i}}leq 0)

    代码

    主斗地

    待填

    星际穿越

    (L(i)=min_{j=i}^nl_j),首先你从一个点(i)起跳你的往左的可达区间为([l_i,i)),然后第二步跳就可以跳到([L(l_i),l_i)),然后一直跳就是这么个情况:([L(L(...L(l_i))),上一次落脚点))

    直接预处理一个跳到另外一个是(O(n^2))的有(70pts),考虑怎么优化。

    令倍增数组(f_{i,j})表示从(j)左跳(2^i)下跳到哪,(g_{i,j})表示([f_{i,j},j])中所需贡献是多少。

    那么你每次倍增求出(x ightarrow l)的代价然后减去(x ightarrow r+1)的代价即可,倍增的具体过程见代码。

    代码

    神仙的游戏

    考虑长度为(len)(border)的性质,就是说对于长度为(n)的字符串(s)(s[1...len]=s[n-len+1,n])(这不是定义吗)
    也就是说位置(iequiv j;(mod;n-len))的话,(i,j)的数字相等。

    那么对于一个不同的(0,1)假设他们的位置之差为(x),假设不成立,则有(x equiv 0;(mod;n-len)),即对于(y|x),长度(n-y)(border)不满足条件。

    然后(O(n^2))地做这个东西是(67pts),想办法优化。

    构造多项式

    [A(x)=sum_{i=0}^{n-1}[s_i=0]x^i\ B(x)=sum_{i=0}^{n-1}[s_i=1]x^i ]

    因为我们要求确定差值,而多项式乘法能做的事是求出确定和,我们可以将(A,B)任意一个多项式(reverse)就可以做到了,最后枚举长度(len)的倍数,如果(C=A imes B)没有地方的(C[n-1-kcdot len]geq 1)以及([n-1+kcdot len]geq 1),那么长度(len)就满足条件,这一部分复杂度是调和级数的。

    总复杂度(O(nlog n+nln n))

    代码

    PKUSC

    待填

  • 相关阅读:
    基于 kubeadm 搭建高可用的kubernetes 1.18.2 (k8s)集群- 四 部署 dashboard 2.x
    基于 kubeadm 搭建高可用的kubernetes 1.18.2 (k8s)集群- 三 集群可用性测试
    基于 kubeadm 搭建高可用的kubernetes 1.18.2 (k8s)集群二 搭建高可用集群
    基于 kubeadm 搭建高可用的kubernetes 1.18.2 (k8s)集群一 环境准备
    git 多用户多仓库配置
    百度地图结合ECharts实现复杂覆盖物(Overlay)
    【简洁易懂】CF372C Watching Fireworks is Fun (单调队列优化dp)
    博客上线测试
    Google Guava14.0 瓜娃学习笔记
    Lucene 4.7 学习及实例demo
  • 原文地址:https://www.cnblogs.com/heyujun/p/11986141.html
Copyright © 2020-2023  润新知