随机化题目合集

1|0CF840D

题目链接

注意到一个很有趣的事情是,一个数如果在长度为 l 的区间中出现次数严格大于 lk 次,那我从这个区间中期望随机 k 次就能随到它。

所以我们对于每个询问,都先随机 B 次,把随机到的数挂进一个 vector,我们对这里面的数进行 check ,把满足条件的数取个最小值即可。

现在问题在于快速 check。当然可以主席树或者挂若干个 vector 然后在里面 lower_bound,但是这样复杂度是 O(qBlogn) 的,我们希望有一些更为纯真的做法。

莫队,把 vector 挂下来,然后对询问跑莫队,维护当前区间内数字内出现次数即可 O(1) check。时间复杂度 O(nq+qB)

2|0CF364D

题目链接

很有趣的题目,但是忘了我啥时候做的。

考虑最终答案有啥性质,他一定是超过 n2 个数的因子。这意味着我如果随机选一个数字 x,我将其和其他数字取个 gcd 并把得到的 gcd 扔到一个桶里计数,然后对桶里的东西做 Dirichlet 后缀和,答案就有 12 的几率是出现次数大于 n2 的数中的最大值。

那我多随几次就做完了,设随机次数为 B,则错误率为 12B。时间复杂度 O(B(d(V)2+V+nlogV))

3|0CF1168E

题目链接

不会证明正确性/yun。

考虑随两个排列 p,q,我们把所有不合法(即 piqiai) 的位置丢进队列里。每次随机调整 pq。调整一个排列时,拎出来 p 中数字为 qiai 的位置和当前位置 i 交换。若这次交换使其不合法,则将其加入队列,直到队列被删空为止。

考虑如果出现循环交换的情况怎么办。设定一个阈值 B,若重构 B 次仍未成功,则再次随机排列。

无解是 i=1nai0,必要性显然,但是我的随机没法证明他充分/zj。

4|0CF643G

题目链接

先不考虑修改,考虑询问怎么做。

注意到 p20,根据前面几个题的套路我们直到可以多随机几次,就有大概率随到正解。又因为有容错所以我们把出现次数的前 min(100p,siz) 大输出即可。

考虑一下正确性。最极端的情况是 p=51,序列中有 511492 之类的情况。随机 B 次后,选择 k1 的概率是 (kB)(0.51)k×(0.49)1k,那么正确的概率是 k=B2B(kB)(0.51)k×(0.49)Bk。这个东西的概率在 B=1000 时是 0.74,但是出题人并没有特意卡掉这一做法。

考虑沿用 CF840D 一题的做法。那么我们考虑现在随机 B 次,每次检查当前随到的这个数是否满足题意。

那么现在变成了一个数据结构问题,支持两种操作,分别为:

  • 区间推平。
  • 区间求某个数字出现次数。

ODT。考虑拿 ODT 维护颜色连续段。开动态开点线段树维护一下每个颜色在该区间的出现次数。对于修改,暴力枚举 ODT 中的颜色段,对应的在线段树上修改,查询直接查。

分析一下复杂度。每次修改操作至多使颜色段增加一个,而每遍历到一个颜色段会让颜色段数量减一,故修改的均摊复杂度是 O(qlogn) 的,这与 ODT 的复杂度分析相同。询问的复杂度是线段树的 O(qBlogn)

再分析正确性,最极端的样例大概是 p=21,然后给出 211,2,3,4165。这样的话错误率是 (0.79)B 的。取 B=100,错误率是 1010 级别的。这样看起来还是比较有保证的。

有一些细节,放在下面。

  • ODT 最好先分裂右端点再分裂左端点,否则好像会出现 ub。
  • 在随机位置求颜色的时候,不要在 ODT 中 upper_bound 再求前驱,而是再开一颗线段树维护颜色。不知道为什么 upper_bound 非常慢,也有我写挂的可能。

5|0P6982

题目链接

首先发现 n2 是最奇怪的,考虑从这里入手。

假设我们知道了一个返回值为 n2 的串,那么我们可以在 n 次操作后得到原串。具体做法如下。

首先取反第一位,然后对剩下的第 2,3,...,n 位按位取反。分情况讨论

  • 返回值为 n2,说明该位正确性与第一位不同。
  • 返回值为 0,说明该位正确性与第一位相同。

在你得到了所有位与第一位的正确性关系后,将所有正确性不同的取反,做一次询问,返回值为 n 即为原串,否则为反串。

接下来考虑如何得到一个返回值为 n2 的串。

大力随机!

考虑正确性,也就是说,我们要从 n 个位置中取出恰好 n2 个位置使得该位与原串相同,剩下的不同,那一次成功的概率即为 (n2n)2n。那么在 500 次内问不出来的概率为 (1(n2n)2n)500。这个东西不会很大,因为 (n2n)2n1。所以直接随机询问即可。

6|0CF1746F

题目链接

首先 k 的倍数看起来就不像是普通数据结构能够维护的,而 n,q3×105 和带修让根号数据结构看起来也不太靠谱,对于统计数字出现个数我们可以考虑莫队,但是复杂度至少是 O(n53poly) 这种过不去的东西。

我们试图从头开始考虑。如果一个数 x 出现次数是 k 的倍数,那么其区间和至少应当被 k 整除。那么我们可以枚举每一个数字,计算其出现次数,判断其是否为 k 的倍数。

但问题是我们不能单个的做,考虑把所有数字打包判断。上面的做法告诉我们一个很好的性质是,如果所有数字的出现次数都是 k 的倍数,其出现次数之和也一定为 k 的倍数,当然这是必要不充分的条件。

接下来就是被出烂的套路。考虑每次随机取一个数集的子集判断,然后再次计算出现次数和。然后随机 B 个子集做这件事情。下面分析正确性,感性理解对于一个区间限制最坏的情况是存在一对数 x,y,满足 kcntx+cntykcntx,cnty,那么此时会被判错当且仅当 x,y 被全选或 x,y 全不选。注意到随机到判错情况的概率是 12。因此 B 次的错误率是 12B,取 B=30 即可。

时间复杂度 O(nBlogn),写线段树可能会被卡常。

7|0P8819

题目链接

圣经

“根据最新消息,敌军摧毁了第45号、171号据点,我军依然顽强抗争,修复了据点37、98。现在可以反攻吗?”

“不可以,总司令。”

“敌军摧毁了第33号据点到42号据点的虫洞,现在可以反攻吗?”

“不可以,总司令。”

“我方修复了第42号据点,可以反攻吗?”

“不可以,总司令。”

“我方……”

“不可以,总司令。”

“同志,你只是一直在回答‘不可以’吗?你到底有没有好好判断形势?现在是关乎国家危亡的时刻……”

“总司令,您知道我不太聪明,没找到快速而正确地计算出结果的办法,但是据某项统计,我一直回答‘NO’的话,在一次战役中判断完全正确的概率是45%。”

“那……”

“不可以,总司令。”

题目相当于是判断是否原图为一颗内向基环森林。

首先注意到当边数和点数相同且构成内向基环树森林时,每个点出度都为 1 和每个点出度均为奇数

是一对等价条件,我们不妨转而维护这个条件,但是由于修改操作仍然不好维护。考虑更进一步,我们试图去维护入度和。对每个点 x 随机一个权值 wx,记 ax 为以 x 为终点的有向边的条数乘上 wx,此时为内向基环树森林的必要条件为 xax=xwx,修改也是好维护的。

正确性分析的话本质上相当于是解一个多元一次方程,但是系数是随机的,所以正确性是有保证的。

8|0CF1479D

题目链接

好像有一些根号的树莫队做法,但是我们是随机化合集(确信)。

沿用上一题的套路,出现次数为奇数是可以用异或刻画的。因此我们可以随机映射后判断路径的对应颜色区间异或值是否为 0,不为 0 则说明有奇数。

现在的问题主要有两个,一是怎么维护路径信息,二是怎么构造答案。首先考虑第一个问题,由于异或有可减性,所以我们套路树上差分成维护到根节点的信息。然后问题在于如何维护区间,想这种每个节点继承前驱信息然后稍作修改的一般可以考虑主席树,对每个节点维护一颗主席树即可,询问时询问对应区间。那么还有第二个问题,我们直接主席树上二分,每次向一个异或值不为 0 的区间递归即可。

9|0ARC158D

题目链接

最有脑子的一集。

注意到等式两侧次数相差恰好 1 且均为齐次式。记录左式为 F(x,y,z),右为 G(x,y,z),则如果我们能够构造出一组 x,y,z 满足 F(x,y,z)=kG(x,y,z),则 F(xk,yk,zk)=G(xk,yk,zk)。因此随机构造即可。唯一的问题是 k 不存在实数域的取值或取 0,即 F(x,y,z)=0G(x,y,z)=0 的这种情况。但是官方题解经过一些分讨证明了出现这种情况的概率不大于 14,所以复杂度有保证。由于我没看懂证明,所以这里不写了,感兴趣可以自行研究官方题解。


__EOF__

本文作者EXODUS
本文链接https://www.cnblogs.com/-Complex-/p/17472114.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   -Comρℓex-  阅读(221)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示