Hash 题解

题意:

  • P=998244353,给出四个整数 F(T),X,Y,Z,其中 X,Y,Z[2,P2] 中随机生成。
  • 定义一棵树的哈希值为 i<jXiYjZlca(i,j)modP
  • 需要构造出点数 50 的树满足哈希值等于 F(T)。多测。20 组数据。

考虑令初态为每个节点的父亲都是 1,设初始哈希值为 H0,考虑在此基础上进行调整。我们考虑构造一棵 n=37 的树。具体调整方法是,我们将 237 分成 6 组,每组 6 个节点,并从每组中选出三个节点 x,y,z,将 x,y 的父亲均改为 z。这样总共会有恰好 12 个节点的父亲不是 1

每组的调整方法有 (52)·6=90 种,对于每种调整方法我们计算出其对哈希值产生的增量 ΔH。由于 X,Y,Z 是从 [2,998244351] 中随机生成的,所以 ΔH 也可视作 [0,998244352] 中的随机数。

于是现在任务转化为,现在有 6 组数,每组中有 90 个数,现在要从每组中选一个数使它们的和 f(T)H0(mod998244353)。这是经典问题,折半搜索即可,时间复杂度 903·logV,其中 log 来源于 std::map。由于所有数都可视作随机生成,因此存在解的概率可以视作 906 个数中存在一个数与给定数 mod998244353 同余的概率,其值等于 1(998244352998244353)5.31441×1011,使用计算器可算出 (998244352998244353)5.31441×1010 已经达到了 1024 级别,因此 1(998244352998244353)5.31441×1011 大约是 110240 级别的,如果实在不放心多随几次必然可以随出正确答案。


关于此题的 idea:出题人大概是今年三月份无意中想到了这个 idea,刚一想到这道题的 idea 时,出题人觉得这题将一个看似不可做的问题转化为 meet-in-the-middle 的思想很妙,但很可惜这类题目由于不好设计部分分,因此无法将其放到 OI 赛制的比赛中,于是就把它投到这里来了。

关于此题的考点:此题考察了选手的构造、随机化、meet-in-the-middle 等的能力,但出题人认为此题最大的难点在于发现此题的思路是通过随机化保证随机到正确答案的概率相对来说较大,而不是像一般的策略构造题那样给出一个普遍性的构造策略。

posted @   tzc_wk  阅读(95)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
历史上的今天:
2021-08-02 莫比乌斯反演&各种筛法
2021-08-02 题解 P5320 - [BJOI2019]勘破神机(推式子+第一类斯特林数)
2021-08-02 Codeforces 1500F - Cupboards Jumps(set)
2020-08-02 UOJ #129 / BZOJ 4197 / 洛谷 P2150 - [NOI2015]寿司晚宴 (状压dp+数论+容斥)
点击右上角即可分享
微信分享提示