20230924###

20230924 NOIP#14总结

时间安排

8:10~8:35

看题,\(B,D\) 看完没一点想法先放放。

8:35~9:20

\(A\) 的前两档和 \(C\) 的第一档。

9:20~9:40

瞪出来了 \(A\) 的正解写了。 (但是因为没判 \(-1\) 导致 \(100\Rightarrow 30\)

9:40~10:00

\(B\) 的第一档。

10:00~11:55

觉得 \(B,C,D\)\(D\) 最可做,想了半天终于会写了。

11:55~12:05

检查文件并抱怨为什么还不来收题我要吃饭。

总结反思

  • 细心做题少犯小毛病

题解

A.最短路

\(n\)\(dijkstra\) 求全源最短路,对于 \(\forall i\in [1,n]\)\(dis_{i,j}\leq t\) 则连一条 \(i\)\(j\) 边权为 \(c\) 的边。再最后跑一遍 \(dijkstra\) 求出答案。

B.套路题

转换成一共有一个 \(n\)\(m\) 列的矩阵满足:每一列最多有一个 \(1\);对于第 \(i\)\([1,l_i],[r_i,n]\) 列中各有恰好一个 \(1\)
\(f_{i,j,k}\) 表示考虑了前 \(i\) 列了,前 \(i\) 列中有 \(j\) 个右区间还没有被满足,还有 \(k\) 列没有选 \(1\) 的方案数。
转移时考虑这一列是否用来匹配一个右区间,以及之前的 \(k\) 列跟当前以 \(l_i\) 结尾的左区间匹配,这两步是同时进行的。
而发现 \(k\) 可以通过 \(i,j\) 计算出来,可以优化一维复杂度。

C.位运算#

考虑 \(x\ xor\ y\) 的性质,若 \(popcount(x)\% 2==popcount(y)\% 2\)\(popcount(x\ xor\ y)\% 2==0\) ,反之亦然。那么直接用线段树维护区间并集中 \(1\) 的个数为奇数和偶数的数的个数即可。
\([1,n]\) 中二进制下有奇数个 \(1\) 的数字个数为 \(x/2+(x\% 2||popcount(x)\% 2)\) #

证明

by lyk
证明 \([1,x]\) 二进制表示下 \(1\) 的个数为奇数的数字个数为 \(x/2+(x\% 2||popcont(x)\% 2)\)
\(x\) 二进制表示下 \(1\) 的个数为 \(f(x)\)
对于任意偶数 \(k\)\(f(k)\)\(f(k+1)\) 一奇一偶
同时,\(f(1)\) 为奇数
所以对于任意奇数 \(l\) 而言,\([1,l]\)\(f(x)\) 为奇数的有 \(l/2+1\)
对于偶数情况,我们考虑是否与 \(f(1)\) 奇偶性相同
不同则 \(x/2\)
相同则 \((x-2)/2+1+1=x/2+1\)

by yzx

D.点分治+"组合计数"

设一个人占据了 \(k\) 个点,则对于一个点对,被占据的概率是 \(\frac{C_{n-2}^{k-2}}{C_n^k}=\frac{k\times (k-1)}{n\times (n-1)}\) ,设点对共有 \(s\) 个(这个可以用点分治求),则答案为 \(ans=s\times \frac{k\times (k-1)}{n\times (n-1)}\)

posted @ 2023-09-24 21:03  programmingysx  阅读(12)  评论(0编辑  收藏  举报