# HNOI2012 题解

HNOI2012 题解

[HNOI2012]永无乡

Tag:线段树合并、启发式合并
联通块合并问题。
属于\(easy\)题,直接线段树合并 或 启发式合并即可。

[HNOI2012]排队

Tag:组合数学、高精度
因为男生没有限制,首先把男生排成一列。
然后分情况讨论:

  • 两个老师之间有男生:
    首先把两个老师插入到\(n\)个男生中,方案数\(\binom{n+1}{2}\)
    然后把女生插入到老师与男生中,方案数\(\binom{n+3}{m}\)

  • 两个老师之间无男生:
    那么两个老师之间只能是一个女生,所以把该女生与老师绑在一起。
    然后把绑在一起的三人插入到男生中,方案数\(\binom{n+1}{1}\)
    再把剩下的女生插入到已经形成的队列中(不能两个老师之间),方案数\(\binom{n+2}{m-1}\)

注意每个人有区别,所以最后乘\(n!m!2!\) ,需要些高精度。

[HNOI2012]集合选数

Tag:构造、状压DP
对于最小为计数的点\(x\),构造矩阵:
\(x\ \ \ 3x\ \ \ 9x\ ....\)
\(2x\ 6x\ \ 18x\ ....\)
\(4x\ 12x\ 36x\ ....\)
然后相当于不能选择矩阵中相邻的元素。
注意到该矩阵的大小最多只有\(17*11\),直接暴力状压即可。

[HNOI2012]矿场搭建

Tag:贪心、割点
把所有的割点求出来,
并把割点删去后把图分成很多联通块,割点算作一个单独联通块。
对于一个联通块,考虑其连接的割点个数。

  • 若割点个数为0
    若联通块大小为\(1\),那么显然只需要放一个。
    若联通块大小大于\(1\),则需要放两个,以防放置点被炸毁。

  • 若割点个数为\(1\),需要放置一个,以防割点被炸毁。
  • 若割点个数大于\(1\),不需要放置。
    因为无论哪个割点被炸毁,都可以通过其他割点进行逃生。

方案数什么的用联通块大小算一算即可。

[HNOI2012]双十字

Tag:DP、计数
枚举每一列为中轴,对每一列单独做一遍计数。
枚举下面的横梁中点,最长延伸长度为\(l_2\),设上面的的横梁中点最长延伸长度为\(l_1\)
讨论:

  • \(l_1 > l_2\) 方案数为\(\frac{l_2(l_2-1)}{2}\)
  • \(l_1 \leq l_2\) ,直接算方案数不好算,考虑总方案减不合法。
    总方案数为\(l_1 * l_2\)
    不合法方案数\(\frac{l_1(l_1+1)}{2}\)
    故方案数为\(l_1*l_2 - \frac{l_1(l_1+1)}{2}\)

可以看出树状数组维护即可。
至于向上、向下延伸的方案数对应的乘一下就行了。

[HNOI2012]与非

Tag:构造、思维
考虑我们用与非这个运算可以干什么。

  • \(notand(a,b) = not(a\ and\ b)\)
  • \(and(a,b) = not(a\ notand\ b)\)
  • \(notand(notand(a,a) , a)\) 为一个每一位都为\(1\)的数,然后就可以做\(not\)了。
  • \(not((not\ a)\ and\ (not\ b))=a\ or\ b\)

所以我们有了与非运算后,可以做\(\&\)\(|\)\(not\)三种操作。
然后我们就可以构造类似线性基的基础元了。
注意到,若某两位\((i,j)\)对于\(n\)个数都满足这两位相等,那么运算后这两位也一定相等。
对于没有限制的单位,我们一定可以构造一个只有该位为\(1\)的基础元。
构造:首先把该位不为\(1\)的数全部\(not\),然后把\(n\)个数全部\(and\)起来。
此时一定只有该位为\(1\),若其它为也有\(1\),则说明这两位是有限制的,与前提条件矛盾。
对于有限制的,类似方法可以构造出只有这些为位\(1\)的基础元。
然后依旧考虑线性基的原理,
我们问题变为:用这些基础元通过\(or\)运算可以构造出多少小于等于\(N\)的数。
从高位往低位,若当前位未被确定并且可以放,则有两种决策,答案直接加上不放的方案数即可。
当前位的确定关系以及限制关系用并查集维护一下就行了。
感觉这题还是比较难的......

猜你喜欢

转载自www.cnblogs.com/GuessYCB/p/9829607.html