阶_LCA
阶
一天,小灰在学习阶的求法时,在代码里写下了这样一句:
1 assert((a^b)%p==a%p);调出来的小灰气急败坏,于是让你解决这个问题: 组询问 ,求最小的正整数 使得 。
当然,善解人意的小灰不止会发牢骚,她还布置了额外的考验:对于 的所有数据,每组询问你需要输出 ,表示在限定了 和 的条件下,原问题的解,若不存在这样的 ,输出 。
如果你通过了小灰的额外考验,她就会在今年 月 日给你转 。
输入格式:第一行两个个整数 ,下面 行每行两个整数 。
, 是奇质数。
特殊性质1:保证 。
(这是我出的一道题)
考虑异或的性质,,则我们求 就是求最小的 ,求 就是求最小的 。
首先考虑特殊性质 ,显然此时 不存在。
考虑求 ,你发现 如果太大了,导致 的最高位高于 的最高位,那么由于 的最高位已经不优,无需考虑此情况。
而剩下的只有 个 ,分别判断即可。
然后考虑正解,你发现加少量的 有可能导致大量进位,此时可能再加一点是更优秀的,例如 为二进制下的 , 为 ,此时求 就不能只加常数个 。
考虑先 ,然后从高往低位确定答案,若当前位目前为 ,且 的这位是 ,且不断 可以在不影响高位的前提下加到该位为 (这个可以利用除法计算),那么我们就加尽量少的 到这个结果。
同理,求解 时先 ,从高往低计算,若当前位为 ,且 的这位为 ,且不断 可以在不影响高位的前提下减到该位为 ,那么我们就减尽量少的 到这个结果。
小惊喜:当 时我们只需要求 ,此时我们感性理解会发现,如果加少量 导致了大量进位产生了严重影响,那么减去少量的 就不会导致这一点,枚举 ,即可通过此部分。
评论
评论插件加载失败
正在加载评论插件