组合计数 - Moamen and XOR - CF 1557C

组合计数 - Moamen and XOR - CF 1557C

题意:

给 定 一 个 长 度 为 n 的 非 负 整 数 序 列 a , 其 中 每 个 元 素 均 小 于 2 k 给定一个长度为n的非负整数序列a,其中每个元素均小于2^k na2k

要 求 满 足 : 要求满足:

a 1   &   a 2   &   a 3   & . . .   &   a n ≥ a 1   ⊕   a 2   ⊕   a 3   ⊕   . . .   ⊕   a n a_1\ \&\ a_2\ \&\ a_3\ \&...\ \&\ a_n\ge a_1\ \oplus\ a_2\ \oplus\ a_3\ \oplus\ ...\ \oplus\ a_n a1 & a2 & a3 &... & ana1  a2  a3  ...  an

计 算 满 足 上 述 条 件 的 序 列 a 的 数 量 , 答 案 对 1 0 9 + 7 取 模 。 计算满足上述条件的序列a的数量,答案对10^9+7取模。 a109+7

输入:

多 测 , 1 ≤ T ≤ 5 多测,1\le T\le 5 1T5

每 组 测 试 数 据 包 括 : n 和 k    ( 1 ≤ n ≤ 2 ⋅ 1 0 5 , 1 ≤ k ≤ 2 ⋅ 1 0 5 ) 每组测试数据包括:n和k\ \ (1\le n\le 2·10^5,1\le k\le 2·10^5) nk  (1n21051k2105)

输出:

一 个 整 数 , 表 示 答 案 一个整数,表示答案

Example
input

3
3 1
2 1
4 0

output

5
2
1

结论:

① 、 若 n 为 奇 数 : ①、若n为奇数: n

A n s = ( 2 n − 1 + 1 ) k Ans=(2^{n - 1}+1)^k Ans=(2n1+1)k

② 、 若 n 为 偶 数 : ②、若n为偶数: n

A n s = ( 2 n − 1 − 1 ) k + ∑ i = 1 k ( 2 n − 1 − 1 ) i − 1 ⋅ ( 2 n ) k − i Ans=(2^{n - 1}-1)^k + \sum_{i=1}^k(2^{n-1}-1)^{i-1}·(2^n)^{k-i} Ans=(2n11)k+i=1k(2n11)i1(2n)ki

分析:

题意本质上是求:选择n个k位二进制数,满足上述约束,计算合法方案总数。

因为二进制的每一位都是独立的,所以我们无须纠结具体的每一个数,仅需从运算结果入手分析,

单独分析结果每一位,根据乘法原理,最后将每一位的合法方案数累乘即可。

记 L = & i = 1 n a i , R = ⊕ i = 1 n a i 记L=\&_{i=1}^na_i,R=\oplus_{i=1}^na_i L=&i=1naiR=i=1nai

记 L 的 二 进 制 表 示 , 第 i 位 数 为 L i ; 同 理 有 R i 。 记L的二进制表示,第i位数为L_i;同理有R_i。 LiLiRi

记 a j 的 二 进 制 表 示 , 第 i 位 数 为 a j i 。 记a_j的二进制表示,第i位数为a_{ji}。 ajiaji

我 们 粗 略 的 分 析 : 我们粗略的分析:

若 对 于 1 ≤ i ≤ m , L i = R i , \qquad若对于1\le i\le m,L_i=R_i, 1imLi=Ri

当 L i + 1 = R i + 1 时 , L 才 可 能 等 于 R ; \qquad当L_{i+1}=R_{i+1}时,L才可能等于R; Li+1=Ri+1LR

当 L i + 1 > R i + 1 时 , L 必 大 于 R 。 \qquad当L_{i+1}>R_{i+1}时,L必大于R。 Li+1>Ri+1LR

又 因 为 , 结 果 的 每 一 位 都 是 独 立 的 , 而 结 果 的 每 一 位 和 1 的 个 数 的 奇 偶 性 相 关 , 所 以 下 面 分 奇 偶 讨 论 : 又因为,结果的每一位都是独立的,而结果的每一位和1的个数的奇偶性相关,所以下面分奇偶讨论: 1

① 、 当 n 为 奇 数 ①、当n为奇数 n

若 存 在 a j i = 0 ( 1 ≤ i ≤ k ) , 则 L i = 0 , L i ≤ R i ;   若 L i = 1 , 奇 数 个 1 异 或 仍 为 1 , 即 R i = 1 , 此 时 L i = R i 。 \qquad若存在a_{ji}=0(1\le i\le k),则L_i=0,L_i\le R_i;\\\ \\\qquad若L_i=1,奇数个1异或仍为1,即R_i=1,此时L_i=R_i。 aji=0(1ik)Li=0LiRi Li=111Ri=1Li=Ri

可 见 : 当 n 为 奇 数 时 , L i 只 可 能 等 于 R i , 即 L 只 能 等 于 R 。 下 面 我 们 详 细 讨 论 每 一 位 的 值 : \qquad可见:当n为奇数时,L_i只可能等于R_i,即L只能等于R。下面我们详细讨论每一位的值: nLiRiLR

Ⅰ 、 L i = R i = 1 , 此 时 仅 有 1 种 情 况 : ∀ j ∈ [ 1 , n ] , a j i = 1 \qquadⅠ、L_i=R_i=1,此时仅有1种情况:\forall j\in[1,n],a_{ji}=1 Li=Ri=11j[1,n]aji=1

Ⅱ 、 L i = R i = 0 , 此 时 我 们 需 要 选 择 偶 数 个 a j i = 1 , 使 得 异 或 值 为 0 , 故 方 案 数 为 : \qquad Ⅱ、L_i=R_i=0,此时我们需要选择偶数个a_{ji}=1,使得异或值为0,故方案数为: Li=Ri=0aji=1使0
C n 0 + C n 2 + C n 4 + . . . + C n n − 1 = C n 1 + C n 3 + . . . + C n n − 2 + C n n = 2 n 2 = 2 n − 1 C_n^{0}+C_n^{2}+C_n^{4}+...+C_n^{n-1}=C_n^{1}+C_n^{3}+...+C_n^{n-2}+C_n^{n}=\frac{2^{n}}{2}=2^{n-1} Cn0+Cn2+Cn4+...+Cnn1=Cn1+Cn3+...+Cnn2+Cnn=22n=2n1

所 以 , 当 n 为 奇 数 时 , A n s = ∏ i = 1 k ( 2 n − 1 + 1 ) = ( 2 n − 1 + 1 ) k 。 \qquad所以,当n为奇数时,Ans=\prod_{i=1}^k(2^{n-1}+1)=(2^{n-1}+1)^k。 nAns=i=1k(2n1+1)=(2n1+1)k

② 、 当 n 为 偶 数 ②、当n为偶数 n

类 比 情 况 ① , 我 们 可 以 分 析 出 合 法 方 案 为 : L ≥ R \qquad 类比情况①,我们可以分析出合法方案为:L\ge R LR

Ⅰ 、 左 边 等 于 右 边 , 只 可 能 有 L i = R i = 0 , 此 时 为 偶 数 个 1 ( 且 存 在 a j i = 0 ) , 即 不 全 为 1 \qquad Ⅰ、左边等于右边,只可能有L_i=R_i=0,此时为偶数个1(且存在a_{ji}=0),即不全为1 Li=Ri=01(aji=0)1

第 i 位 相 等 的 合 法 方 案 数 为 : \qquad\quad 第i位相等的合法方案数为: i

C n 0 + C n 2 + C n 4 + . . . + C n n − 2 = C n 0 + C n 2 + C n 4 + . . . + C n n − 2 + C n n − C n n = 2 n − 1 − 1 C_n^0+C_n^2+C_n^4+...+C_n^{n-2}=C_n^0+C_n^2+C_n^4+...+C_n^{n-2}+C_n^n-C_n^n=2^{n-1}-1 Cn0+Cn2+Cn4+...+Cnn2=Cn0+Cn2+Cn4+...+Cnn2+CnnCnn=2n11

注 : 二 项 式 系 数 和 的 性 质 , S e v e n = S o d d = 2 n − 1 \qquad\quad 注:二项式系数和的性质,S_{even}=S_{odd}=2^{n-1} Seven=Sodd=2n1

Ⅱ 、 左 边 大 于 右 边 \qquad Ⅱ、左边大于右边

注 意 , L > R 无 须 任 意 的 L i > R i , 我 们 仅 需 保 证 前 i − 1 位 L i − 1 = R i − 1 , 第 i 位 L i = 1 且 R i = 0 即 可 。 \qquad\quad注意,L>R无须任意的L_i>R_i,我们仅需保证前i-1位L_{i-1}=R_{i-1},第i位L_i=1且R_i=0即可。 L>RLi>Rii1Li1=Ri1iLi=1Ri=0

根 情 况 Ⅰ , 前 i − 1 位 相 等 的 合 法 方 案 数 为 : ( 2 n − 1 − 1 ) i − 1 ; 第 i 位 向 后 任 意 , 方 案 数 为 : ( 2 n ) k − i \qquad\quad 根情况Ⅰ,前i-1位相等的合法方案数为:(2^{n-1}-1)^{i-1};第i位向后任意,方案数为:(2^n)^{k-i} i1(2n11)i1i(2n)ki

故 合 法 方 案 数 为 : \qquad\quad故合法方案数为:

∑ i = 1 k ( 2 n − 1 − 1 ) i − 1 ⋅ ( 2 n ) k − i \sum_{i=1}^k(2^{n-1}-1)^{i-1}·(2^n)^{k-i} i=1k(2n11)i1(2n)ki

故 n 为 偶 数 时 , 合 法 方 案 总 数 为 : \qquad 故n为偶数时,合法方案总数为: n A n s = ( 2 n − 1 − 1 ) k + ∑ i = 1 k ( 2 n − 1 − 1 ) i − 1 ⋅ ( 2 n ) k − i Ans=(2^{n - 1}-1)^k + \sum_{i=1}^k(2^{n-1}-1)^{i-1}·(2^n)^{k-i} Ans=(2n11)k+i=1k(2n11)i1(2n)ki

代码:

#include<cstdio>
#include<algorithm>
#include<iostream>

using namespace std;

const int N = 200010, mod = 1e9 + 7;
typedef long long ll;

int T, n, k;
ll ans, pow_2[N];

void init()
{
	pow_2[0] = 1;
	for(int i = 1; i < N; i ++)
		pow_2[i] = pow_2[i - 1] * 2 % mod;
}

ll quick_pow(int a, int b)
{
	ll res = 1;
	while(b)
	{
		if(b & 1) res = res * a % mod;
		a = (ll)a * a % mod;
		b >>= 1;
	}
	return res;
}

int main()
{
	init();
	scanf("%d", &T);
	while(T --)
	{
		scanf("%d%d", &n, &k);
		ll ans = 0;
		if(n & 1) ans = quick_pow(pow_2[n - 1] + 1, k);
		else
		{
			ans = quick_pow(pow_2[n - 1] - 1, k);
			ll sum = 0; 
			for(int i = 1; i <= k; i ++)
				sum = (sum + quick_pow(pow_2[n - 1] - 1, i - 1) * quick_pow(pow_2[n], k - i) % mod) % mod;
			ans = (ans + sum) % mod;
		}
		printf("%lld\n", ans);
	}
	
	return 0;
}	
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值