#4459. 或

题意

有n个非负整数,求使它们都是3的倍数,且或的和为t的方案数。

范围

n,t<=1e18

题解

考场:
因为是或,故相当于限制0的位一定不能选,1的位至少有一个选。如果不要求1的位至少有一个选,显然DP可以求出符合条件3的倍数的个数,所以考虑容斥,暴力地枚举哪些为1的位强制不选即可,效率O( t l o g t tlogt tlogt)。
正解:
考虑如何避免枚举每一是否强制不选,即如何快速算出只有其中k位可选0/1(对于同一个k容斥系数相同),其余全0,使其是3的倍数的方案数。考虑每一位1(即 2 i 2^{i} 2i)有什么共同点,我们只关心它在mod3意义下的余数,发现在 2 i 2^{i} 2i在mod3意义下只可能为1或2,所以只有两种,枚举这两种的个数即可,效率O( l o g 3 t log^{3}t log3t).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值