Loading

BZOJ 100x 做题记录

#1000. A+B Problem

太难了,不会。

#1001. [BeiJing2006]狼抓兔子

印象很深刻,接触对偶图的第一题,跳过。

#1002. [FJOI2007]轮状病毒

可以看出,一个轮状病毒满足将外部的环断成若干段,每段向中心点连恰好一条边。

可以先考虑一条链的做法。设 \(f(n)\) 为长度为 \(n\) 的链的答案,则满足 \(f(n)=\sum_i f(n-i)\cdot i\)

放到环上就是枚举一条链的位置后,乘以剩下的一段的长度。Code(注意高精度实现有误,因为数据水所以过了)

#1003. [ZJOI2006]物流运输

注意到码头数量很小,所以用状态压缩 DP 出只经过某个集合中的点时的最短路径长度。然后再 DP 出每天选择每种路径的最小花费。Code

#1004. [HNOI2008]Cards

复习一下 Burnside 引理。

\[|X/G|=\frac{1}{|G|}\sum_{g\in G}|X^g| \]

\(X\) 是一些从 \(A\)\(B\) 的映射组成的集合。当时我因为没有弄清映射的概念,在这道题上卡了很久。

有了这个公式题目就简单了。把每种洗牌法拆成不相交的循环置换,那么循环置换内的点颜色必须相同。所以答案只与每个循环置换的大小有关。用类似背包的东西,每次加入一个置换,就能统计出每一种洗牌法的方案数。不要忘记每个点都不动也算一种洗牌法。所以最终答案就是所有洗牌法的答案相加除以 \(m+1\)Code

#1005. [HNOI2008]明明的烦恼

直接用 prufer 序列做。一个点度数为 \(d\) 就得在序列中出现恰好 \(d-1\) 次。故答案为

\[T^u\binom{n-2}{u}\frac{(n-2-u)!}{\prod_{d_i>0}(d_i-1)!} \]

其中 \(u=n-2-\sum_{d_i>0}(d_i-1)\),即度数没有确定的点占用的位置总数;\(T=\sum_i[d_i=-1]\),即度数没有确定的点的总数。

一个细节在于如何做除法。高精度除法是可以避免的。只需要把所有除数分解质因数,然后做乘法时尝试用所有质数去消除它再乘入答案即可。然而当时我忘记了很久以前写的 阶乘分解质因数技巧,而是集中分解,速度也很快。Code

#1006. [HNOI2008]神奇的国度

关于 弦图 的科技题,挖个坑,有时间再来学。

#1007. [HNOI2008]水平可见直线

猜测最上面的折线形状为一个凸包,用反证法不难(?)证明。于是用一个单调栈就水过去了。Code

#1008. [HNOI2008]越狱

究极大水题。正难则反。Code

#1009. [HNOI2008]GT考试

先考虑 \(n\le 10^5\) 时怎么做。设 \(f(i,j)\) 表示有 \(i\) 个位置,其长为 \(j\) 的后缀中填上了不吉利数字的前缀的答案。

\[f(i,j)=\begin{cases}f(i-1,j-1)-c_jf(i-1,m-1)&j>0\\10f(i-1,0)-f(i-1,m-1)&j=0\end{cases} \]

其中 \(c_i\) 表示不吉利数字是否存在长为 \(i\) 的 border。

然后矩阵加速。Code

posted @ 2023-06-06 22:35  hihihi198  阅读(19)  评论(0)    收藏  举报