P4067 [SDOI2016]储能表 题解

题意

给定nmkp,在模 p 意义下计算

i=0n1j=0m1max((ixorj)k,0)

T 组测试
T=5000n1018m1018k1018p109

题解

trick:max(ak,0) 变为 ([ak]a)([ak])k
我们考虑 xor特性是位之间独立,题目限制也只有数的大小,所以我们考虑数位 DP

问题等价于找到 (i,j)满足ixorjk(i,j) 对数和 ixorj 的和,ij 显然要同时 DP

因为这里统计的对象是 ixorj ,且它与 i ,j,分别有限制,所以我们要额外记三个信息。
fi,l1,l2,l3 为不考虑前 i 位的贡献,前 i 位是否卡到 n1 的上界、是否卡到 m1 的上界,xor 是否卡到 k 的下界。然后分别枚举 ij 在这一位填什么,把算出低位的贡献和个数后用个数乘上这一位的贡献

总结

  1. 要从贡献在数位之间独立看出来是数位 DP
  2. 要把 max 转化掉
  3. 要想到同时 DP i,j,ixorj
posted @   Lumos壹玖贰壹  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示