Loading

各省省选选做

HNOI

\(\text{I}\). [HNOI/AHOI2018] 寻宝游戏

先考虑 \(m=1\) 的情况。

注意到位运算具有短路性。具体来说,有

\[\begin{aligned} x\& 0=0\\ x\mid 1=1 \end{aligned} \]

所以若有 \(\&0\)\(\mid1\),那么前面的操作都不用做了。

进一步观察可以发现

\[\begin{aligned} x\& 1=x\\ x\mid 0=x \end{aligned} \]

也就是说,其他操作并不会改变答案。

接下来就是这题最人类智慧的地方了,考虑把 \(\&\) 看作 \(1\)\(\mid\) 看作 \(0\),那么答案为 \(1\) 当且仅当操作序列小于原序列。(注意是把后面的看作高位)

Proof:

记操作序列为 \(a\),原序列为 \(b\)

  • 先证必要性,假设对于第 \(i\) 位是第一个满足 \(a(i)<b(i)\) 的,因为 \(\forall j>i,a(j)=b(j)\),所以最后的答案等于前 \(i\) 个的答案。又因为 \(a(i)<b(i)\),所以这一位会被短路成 \(1\)

  • 再证充分性,考虑证明它的逆否命题:操作序列大于等于原序列可以推出答案为 \(0\)。当大于时证明与上述类似,而等于时显然是最开始的 \(0\)\(\square\)

再考虑 \(m>1\) 的情况。

先将每一位的序列排序。每次查询一个数 \(s\),对于 \(s_i=0\) 的位,要满足操作序列大于等于原序列;否则要小于。这样就可以求出一个操作序列的范围,直接输出即可。

\(\text{II}\). [AH2017/HNOI2017] 礼物

考虑每个点作为 \(\max\) 的贡献,记 \(lb_i,rb_i\) 分别为其左/右第一个大于它的数的位置,那么有

  • \((lb_i,rb_i)\) 这一对是个一类点对,并且也只有这一对是。因为区间缩小不满足条件,扩大 \(i\) 就不是 \(\max\) 了。

  • \((lb_i,k)(i<k<rb_i)\) 都是一个二类点对,同理 \((k,rb_i)(lb_i<k<i)\) 也是。这些区间同样不能再扩大和缩小了。

所以一个点作为 \(\max\) 的贡献为

  • \(L\le lb_i\le rb_i\le R\),则有 \(p_1\) 的贡献。

  • \(lb_i\ge L\),则有 \(p_2\times(\min(R,rb_i-1)-i)\) 的贡献。

  • \(rb_i\le R\),则有 \(p_2\times(i-\max(L,lb_i+1))\) 的贡献。

然后考虑如何用数据结构维护。

第一种贡献是二维数点,二三种是类似的,只考虑第二种。

考虑对于每个 \(lb_i\ge L\),给区间 \([i+1,rb_i-1]\) 作为点对的右侧的贡献加一。查询时查区间 \([L,R]\) 内所有作为点对的右侧的贡献之和,这可以用线段树/树状数组求出。

\(\text{III}\). [AH2017/HNOI2017] 礼物

先转化为旋转序列 \(a\),并可以给序列 \(a\) 加上任意整数 \(c\),要求最小化 \(\sum(a_i-b_i)^2\)

暴力拆式子得到

\[\begin{aligned} ans&=\sum(a_i-b_i+c)^2\\ &=\sum(a_i^2+b_i^2+c^2+2ca_i-2cb_i-2a_ib_i)\\ &=\sum a_i^2+\sum b_i^2+nc^2+2c\left(\sum a_i-\sum b_i\right)-2\sum a_ib_i \end{aligned} \]

惊奇地发现只有最后的 \(\sum a_ib_i\) 不是定值。

观察到这一形式,想到卷积。将序列 \(a\) 翻转后再复制一份,然后与序列 \(b\) 卷起来就可以得到所有可能的的 \(\sum a_ib_i\)

前面关于 \(c\) 的二次函数可以暴力枚举 \(c\) 的取值。

\(\text{VI}\). [AHOI2017/HNOI2017] 大佬

把恢复自信值的操作与怼大佬的操作分开。

先用 DP 预处理出不被嘲讽死下的最多的不恢复自信的天数(即最多的不做水题的天数)。再用 BFS 暴搜+ Hash 判重求出所有可能的 \((f,t)\) 对,表示经过 \(t\) 天后嘲讽值为 \(f\)

不怼和只怼一次大佬的情况很好判断,所以只需解决怼两次大佬。

不妨设两次分别为 \((f_i,t_i)\)\((f_j,t_j)\),那么有

\[\begin{aligned} f_i+f_j\le C\\ f_i+f_j+(D-t_i-t_j)\ge C \end{aligned} \]

其中 \(D\) 表示上文求出的最多的不恢复自信的天数。

先把二元组按 \(f\) 排序。考虑从大到小枚举 \(i\),那么 \(j\) 的范围是一段前缀,且要 \(f_j-t_j\) 最大。每次双指针加入即可。

\(\text{V}\). [AH2017/HNOI2017] 抛硬币

先考虑 \(a=b\) 的情况。此时两人获胜的方案数是相同的,均为总方案数减去平局的方案数,再除以 \(2\)

总方案数显然为 \(2^{a+b}\),平局的方案数为

\[\sum_{i=0}^a\binom{a}{i}^2=\binom{2a}{a} \]

再考虑 \(a>b\) 的情况。类似地,可以想到有很多状态都和上面一样,对偶后是对方胜的。

对偶的一对方案中,一定恰好有一组是 \(A\) 赢(包括平局)。所以若记 \(S\) 为不对偶的方案数,那么有

\[ans=S+\frac{2^{a+b}-S}{2}=\frac{2^{a+b}+S}{2} \]

此时,根据定义有

\[\begin{aligned} \left|A\right|&>\left|B\right|\\ a-\left|A\right|&>b-\left|B\right|\Longrightarrow\left|A\right|-\left|B\right|<a-b \end{aligned} \]

所以可以枚举 \(\left|B\right|\)\(\left|A\right|-\left|B\right|\),那么有

\[\begin{aligned} S&=\sum_{i=0}^b\sum_{j=1}^{a-b-1}\binom{b}{i}\binom{a}{i+j}\\ &=\sum_{j=1}^{a-b-1}\sum_{i=0}^b\binom{b}{b-i}\binom{a}{i+j}\\ &=\sum_{j=1}^{a-b-1}\binom{a+b}{b+j} \end{aligned} \]

其中最后一步用到了范德蒙德卷积。

然后直接 exLucas 即可。时间复杂度 \(O((b-a)\log^2a+2^k+5^k)\)

CQOI

[CQOI2018] 九连环

\(f_n\) 表示 \(n\) 个环全部拆卸的最小步数。那么肯定是先将第 \(n\) 个环拆下,之后步数是 \(f_{n-1}\),而前面是将前 \(n-2\) 个环拆卸后拆下第 \(n\) 个环,然后再装上前 \(n-2\) 个环,所以有

\[f_n=f_{n-1}+2f_{n-2}+1 \]

进一步观察可以发现,\(f_n=2f_{n-1}+(n\bmod 2)\),考虑用归纳法证明:

  • \(n=1\),显然有 \(f_1=2f_0+1\)

  • \(n>1\),那么

    • \(n\bmod 2=1\),则 \(f_n=f_{n-1}+2f_{n-2}+1=2f_{n-1}+1\)

    • \(n\bmod 2=0\),则 \(f_n=f_{n-1}+2f_{n-2}+1=2f_{n-1}\)\(\square\)

但并没有那么简单。注意到 \(f_n\ge2^n\),所以至少有 \(B=n\lg2\approx30102\) 位,要写高精度。

考虑求出 \(F(x)=\sum f_ix^i\) 的封闭形式:

\[\begin{aligned} F(x)&=f_0+f_1x+f_2x^2+f_3x^3+\cdots\\ 2xF(x)&=2f_0x+2f_1x^2+2f_2x^3+2f_3x^4+\cdots\\ &=(f_1-1)x+f_2x^2+(f_3-1)x^3+f_4x^4+\cdots\\ (1-2x)F(x)&=x+x^3+x^5+\cdots\\ &=\frac{x}{1-x^2}\\ F(x)&=\frac{x}{(1+x)(1-x)(1-2x)} \end{aligned} \]

然后就可以求出通项公式了:

\[f_n=\frac{2^{n+2}-(-1)^n-3}{6} \]

直接 NTT 算出 \(2^{n+2}\) 即可。

[]

posted @ 2025-02-07 22:18  LIUIR  阅读(24)  评论(0)    收藏  举报