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$的贡献,可以容斥计算,一个点不产生贡献当且仅当所有被选的点在这个点的某一棵子树(以这个点为根)内

$\binom{n}{k}-\sum\limits_{u\in son[x]} \binom{sz_u}{k}$

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

$n\binom{n}{k}-\sum\limits_{i=2}^{n} (\binom{sz_i}{k}+\binom{n-sz_i}{k})$

$n\binom{n}{k}-\frac{1}{k!}\sum\limits_{i=2}^{n} (\frac{sz_i!}{(sz_i-k)!}+\frac{(n-sz_i)!}{(n-sz_i-k)!})$

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

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

代码

posted @ 2020-11-26 07:39  SevenDawns  阅读(157)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end