来点题外话:我创建这个专栏的时候不会想到我会有一段时间每天都在打代码,cf出勤率从来没这么高过……
由于最近写题解的部分转化成了给学弟们回答问题,特别是在cf后,因此没怎么更新,所以小更一波~
Problem - F - Codeforces
群里看到的,觉得这题非常有趣,于是来点更新
题目大意:给一个初始数组,q个操作
1 i x:ai换成x
2 l r k:查询l到r内是否存在每种数的个数都是k的倍数
题解:如果符合条件的话,则区间l-r的和是k的倍数,当数被离散化后此结论同样成立。
如果区间和为k的倍数的时候,有可能是对的也可能是错的
但是如果不为k的话,此时一定是错误的
我们想办法排除掉本来是错误但是被我们判定为正确的情况的情况
如果k为2的话,如果本来答案是错误的,此时有奇数和偶数两种情况,概率相同,偶数会被判定为对的,因此错误概率为1/2
k大于2之后错误概率减少
我们重复哈希t次,直到错误概率约等于0,概率约为1/2^t,t取30(我不知道为啥,但是这个概率看起来脸不黑应该是能过的)
单纯的单点修改+区间查询=树状数组
好啦结束
代码还没写,我研究下随机化hashing
博主分享了一道来自Codeforces的题目,讨论了如何处理区间内元素个数为特定倍数的问题。通过离散化和区间和的性质,可以判断某些情况是否满足条件。对于错误概率的降低,博主提出了使用随机化哈希多次检查的方法,错误概率可降至约1/2^t,t通常取30。解决方案中涉及到了树状数组这一数据结构。
&spm=1001.2101.3001.5002&articleId=127438171&d=1&t=3&u=bad14d4184cf43fba648f02808a77aed)
697

被折叠的 条评论
为什么被折叠?



