继续开坑
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$