CF1066E 题解

CF1066E

题意#

给定两个长度分别为 l1,l2 的二进制数 s1,s2,令答案为 ans

s2>0 时,ans 加上 s1 & s2 所表示的十进制的值,之后 s2 的值减少到原来的一半(向下取整)。

请你求出最终的 ans (对 998244353 取模)。

思路#

因为 s1 是不会变化的,所以我们可以考虑 s1 的每一位对于答案的贡献。

s11s1 的最高位,s12s1 的次高位,以此类推。

因为做的是 & 运算,所以如果 s1i0,那就不能对答案产生任何贡献。

那么如果 s1i1,那么从 s21s2max(0,l1l2)+i 都会对第 i 位产生贡献。

所以做法就很明显了,先预处理出 s2 的前缀和。

对于所有 1il1,如果 s1i1,会对答案有贡献,求出贡献,累加。

作者:cn

出处:https://www.cnblogs.com/chengning0909/p/17209767.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   chengning0909  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示