311A TopCoder SRM555 XorBoard
简要题意
网格,至多做 次行取反,至多做 次列取反。求本质不同操作方案使得有 个 ,本质不同指存在一行或一列操作次数不同。
网格大小 。
Sol
枚举最终被操作奇数次的行列,判断数量对不对,先乘个组合数,然后行上列上要算 个无标号球放到 个有标号盒子里的方案数,盒子可以为空,这个可以简单插板法计算。
(说实话当时没想到插板,写了个奇怪 dp,数数数少导致的)。
启示: 枚举操作是很笨且有效的手段,无标号计数可以考虑插板。
311B Topcoder SRM550 ConversionMachine
简要题意
给一个长度为 的字符串 ,字符集为 。现允许 做 的单向变换,代价为 ,求有多少操作序列代价和不超过 使得 变为 。
Sol
考虑先把每个位置变换成与 相同,然后就可以算出总操作次数,问题就变成了有若干个序列,每个序列对三取余长度限定,求这些序列归并成一个程度为 的方案数。
这个问题可以直接上单位根反演的 EGF,然后暴力枚举展开式可以做到 ,也可以当成多元生成函数求偏导优化 EGF 快速幂做到很低的复杂度。
不过显然也可以直接矩乘,因为发现操作到一定次数后所有序列长度都合法这个是充要的,那么直接设 表示有 个序列需要动零次, 个序列需要动一次,剩下动两次,直接转移,复杂度 。
311C Topcoder SRM549 CosmicBlocks
给出 种颜色的砖块,每种颜色有若干个,A 将这些砖块堆成若干个塔,要求每种颜色的砖块高度都相同,B 可以用任何一种颜色顺序依次取走这些砖,要求取走时这种颜色上不能有别的砖。
求有多少种本质不同的堆放方式,使得 B 的合法取走顺序数量在 之间,两种方式本质不同当且仅当存在两个颜色 在其中一种方案中 在 上方,而在另一种方案中 不在 上方。
Sol
看到 和本质不同定义,考虑直接搜颜色之间偏序集,check 合法可以使用网络流,当然也可以使用霍尔定理节省代码量,最后直接算 B 的方案数是否合法。
搜偏序集也有讲究,一种最好写的方法是直接钦定每种颜色的高度,并且只在相邻的高度之间连边,在高度最低为 时不难发现这样的偏序集都是本质不同的。
复杂度很大。
311D Topcoder SRM548 KingdomAndCities
求有多少张 个点 条边的无向连通简单图满足前 个点度数为 。
Sol
时就是图计数,经典做法枚举含根连通块大小直接 dp。
看上去 时需要很多分类讨论,但是有一个神仙的观察:
对于一个度为二的点,可看作一条边上“长出了”一个点。
我们直接枚举这个点是由哪条边长出来的,注意这个时候还有一种情况是将一条原来不可能出现的重边替换掉。
也是类似的。
311E Top三
本文作者:World Creater
本文链接:http://worldcreaterwc.github.io/NFLS2024/
版权声明:本博客中所有原创文章除特别声明外,均允许规范转载,转载请注明出处。所有非原创文章,按照原作者要求转载。