2024牛客暑期多校训练营1 A题

题面:给定n,m,q,构造一个长度为n的数组,其中数组中的每个元素大小均小于2^{m},若该数组的某一个子序列中,所有元素按位与(AND)之后的结果为1,则该数组合法。求有多少种合法数组

例如n=3,m=3,q=100000

[1,0,3]是一个合法数组,因为子序列[1]的AND结果为1

[5,3,0]是一个合法数组,因为子序列[5,3]的AND结果为1

思路:

将原问题看成:

  找到子序列中,恰好有i个元素相与为1,多一个都会出错。

  一.i个元素相与为1,可以看成如下图:

该位下至少有一个为0该位下至少有一个为0该位下至少有一个为0必须全1
第一个元素的二进制1
第二个元素的二进制1
.........1
第i个元素的二进制1

那么某位至少有一个0,也就是不能全1,也就是该位可以填的数有2^{i}-1个,而总共有(m-1)位这样的位置,总共可以填的数量为

(2^{i}-1)^{m-1}    

而需要从n个数中挑选i个值出来,还需乘上C_{n}^{i}

二.对于其它的n-i个位置,由于它不能和前面的任意数字AND后为1,仅需令第一位为0即可

任意任意任意必须全0
第一个元素的二进制0
第二个元素的二进制0
.........0
第n-i个元素的二进制0

也就是每个元素可以任取2^{m-1}种值,总共n-i个元素,得到的结果为:

(2^{m-1})^{n-i}

最终得到的结果为:

C_{n}^{i}*(2^{i}-1)^{m-1}*(2^{m-1})^{n-i}

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值