『杂题』做题记录2

AGC020F

长度为 \(c\) 的圆,有 \(n\) 条弧随机放在上面,求所有实点都被覆盖的概率。

考虑断环成链,怎么断才可以考虑用链计数?考虑我应定一个弧的顶点为链的开头,我想要转换成链上覆盖,然后保证覆盖到链外即可,不需要考虑覆盖过去是影响什么。那我应定的那条弧极为重要,我只需保证没有弧会跨过这个应定的弧,即没有弧包含这条弧,那这么考虑就会想到最长的弧一定不会被包含,应定一条最长弧即可。

然后我们思考这个概率实点这玩意很ex,但是我们会发现我们只关心端点的整数部分和小数部分的相对大小关系,那就把两个整点之间加入 \(n\) 个虚点,相当于充当小数相对大小关系。

这样就好计数了,首先可以枚举 \(O(n!)\) 的小数关系,然后计数的话直接状压即可。

ARC070F

\(a\) 个诚实的人,\(b\) 个不友好的人,询问诚实的人不会说谎,二不友好的人可能说谎,你希望在 \(2(a+b)\) 次询问一个人关于另一个人是否是诚实的,得到所有人诚实与否,不友好的人不希望你得到信息,也就是他们会采取一种策略,如果得不到输出 \(\text{Impossible}\)

nb题。

首先不难想到的是 \(a \leq b\) 时无解,随便找 \(a\) 个不友好的人说其中 \(a\) 个不友好的人是友好的,说 \(a\) 个友好的人是不友好的,这样必然得不到结果。

大胆猜?否则一定有解?我觉得这个比较靠感觉,没什么理性的推导,但是可以猜测后证实,就是答案倒推法,这种东西一般称之为人类智慧。

然而这还不是最nb的点,如何构造方法才是比较nb的地方,我们可以维护一个可能是诚实人的集合还有一个全集,然后 \(\rho\) 一个集合中的人,再 \(\rho\) 一个集合外的人,全集内的人,然后拿那个可能是诚实的人问另一个人,如果回答是 \(\text{Yes}\) 那么它也可能是诚实的人,加入集合即可,否则回答是 \(\text{No}\),那么不难发现两个人之中至少有一个人是不友好的,将两个从全集中删掉,将可能诚实的人从可能是诚实人的集合删掉。

这么做正确的原因是 \(a>b\) 且每次删两个人,其中至少一个是不友善的,删到最后一定剩下集合中必然是诚实的,当我们确定一个诚实的人就可以拿那个人查 \(n-1\) 次其他人,就可以确定其他人的状态了。

查询差不多是 \(2n\),挺人类智慧的。

ARC068F

维护一个双向队列,顺序加入 \([1,n]\),求删除序列使得第 \(k\) 个删除的是 \(1\)

oops,小清新题。

不难发现一个性质,双向队列中必然是一个单减再单增的序列。

那么删除序列中必定不存在一个子序列长度 \(\geq 3\) 且单增。

考虑第 \(k\) 个是 \(1\) 不好搞,考虑逆序列,想这种没有什么排列子序列单调性问题,逆序列 \(a_{p_i}=i\) 同样满足性质,是充要的。

那么问题转化成 \(a_1=k\) 的删除序列个数,设 \(f_{i,j}\) 表示 第 \(1\) 个数是 \(j\) 长度为 \(i\) 的序列个数。

不难得出 \(f_{i,1}=1,f_{i,i}=\sum\limits_{k=1}^{i-1} f_{i-1,k}\)

考虑求 \(f_{i,j} ,(1 < j < i)\)

考虑到 \(a_2\) 只能取 \(i\) 或者 \(p < j\)

不难得出 \(f_{i,j}=f_{i-1,j}+\sum\limits_{k=1}^{j-1} f_{i-1,k}=\sum\limits_{k=1}^{j} f_{i-1,k}=f_{i,j-1}+f_{i-1,j}\)

可以做 \(O(n^2)\) 了,但是有更加优美的方法。

考虑其组合意义,就是 \(n \times k\) 的网格上,从 \((1,1)\) 走到 \((n,k)\) 且不经过 \(j=i+1\) 这条线的方案数。

容斥一下,没有限制是套路,方案数为 \(C_{n+k-2}^{n-1}\),考虑不合法的方案数,考虑将不合法数双射到一个终点上,不难发现 \((m+1,n)\) 可可以构成双射,方案数为 \(C_{n+k-2}^{n}\)

方案数就是 \(2^{n-k-1} (C_{n+k-2}^{n-1}-C_{n+k-2}^{n})\)

\(O(n)\)

用快速阶乘算法可做到 \(O( \sqrt n \log n)\)

posted @ 2023-07-08 15:35  Detect-Perplexity  阅读(4)  评论(0编辑  收藏  举报