zoukankan      html  css  js  c++  java
  • AGC5 总结

    继续开坑

    D.~K Perm Counting

    可以比较自然地想到容斥,把不等号改成等号,那么会发现只有下标在模$2k$下相等的时候才会有可能发生冲突,那么对于$i$从$1-2k$所有值单独进行考虑

    每一个位置可能会有一上一下的两个可能取值,就是$i+k$和$i-k$,开头的那个可能没有下面的取值,最后那个可能没有上面的取值

    那么考虑DP,设$dp[i][j][0/1/2]$表示考虑到第$i$位的时候选了$j$个位置的方案数,$0$表示取了下面那个取值$i-k$,$1$表示取了上面那个取值$i+k$,$2$表示这个位置没有取值,那么按照定义转移即可

    一开始想复杂了,写了一个将序列分段的DP,特殊情况特别多,那么就应该考虑一位一位DP,而不是划分段(整体)去DP

    代码

    E.Sugigma: The Showdown

    首先可以发现,如果在红树上存在一对相邻的节点,使得在蓝树上这两个节点的距离>2,那么当先手走到这两个节点之一的时候,就一定可以走无限步,因为先手可以在这两个节点之间反复跳,后手永远追不上先手

    那么现在就是判断先手能否走到这样的必胜点

    再分析一下后手的策略,一定是走向离先手更近的节点,因为后手不走或走到更远的节点时,先手就可以待在原地不动,使得局数更大并且保证后手不会抓到自己

    那么现在考虑先手可以走到必胜点的条件,由于红树上从起点到必胜点之间的边都是再蓝树上距离$leq 2$的,那么先手很有可能在中途被后手抓住,那么需要不停留不断的跳,相当于在dfs遍历树的时候,模拟先后手的操作,如果可以达到必胜点那么$-1$

    但如果达不到,先手就要先不断跳到一个比较远的位置,然后停在那里直到后手抓住他,答案就是先手跳到这点的距离+蓝树上后手当前位置到先手位置的距离,对于每一个先手还没有被后手抓住的节点取$max$即可

    代码

    F.Many Easy Problems

    反而是F比E简单

    考虑每一个点对$k$的贡献,可以容斥计算,一个点不产生贡献当且仅当所有被选的点在这个点的某一棵子树(以这个点为根)内

    $inom{n}{k}-sumlimits_{uin son[x]} inom{sz_u}{k}$

    考虑所有点对k的贡献,假定在计算$sz$的时候以$1$为根

    $ninom{n}{k}-sumlimits_{i=2}^{n} (inom{sz_i}{k}+inom{n-sz_i}{k})$

    $ninom{n}{k}-frac{1}{k!}sumlimits_{i=2}^{n} (frac{sz_i!}{(sz_i-k)!}+frac{(n-sz_i)!}{(n-sz_i-k)!})$

    考虑如何对于每一个$k$快速计算右边的式子,由于$sz$和$n-sz$是离散的,不妨将这些数在数值的位置上$+num!$,看作一个$n$次多项式,对于分母的计算,就是反转之后的东西,反转完之后,就是一个卷积形式

    还有这个模数的原根是$5$

    代码

  • 相关阅读:
    cross-domain
    【转】React、Vue访问NotFound
    Flutter环境配置
    antd遇见的坑
    npm源设置
    React中的生命周期函数
    【备忘】javascript原型、Function、eval、闭包、json处理、类、arguments不定
    ADB获取手机信息
    selenium操作
    操作execl
  • 原文地址:https://www.cnblogs.com/huangchenyan/p/14040243.html
Copyright © 2011-2022 走看看