专栏文章

CF2025B Binomial Coefficients, Kind Of 题解

CF2025B题解参与者 2已保存评论 4

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
4 条
当前快照
1 份
快照标识符
@miqp8ezy
此快照首次捕获于
2025/12/04 08:29
3 个月前
此快照最后确认于
2025/12/04 08:29
3 个月前
查看原文

CF2025B Binomial Coefficients, Kind Of 题解

思路

考虑打表找规律:
n/k01234
01
111
2121
31241
412481
容易发现,当 n=kn = kk=0k = 0 时,Cn,k=1C_{n,k} = 1。否则 Cn,k=2kC_{n,k} = 2^k。再观察数据范围,1ki<n1 \le k_i < n,就不需要考虑前面的情况了。
可以用数学归纳法证明。读者自证不难。
已知 C0,0C_{0,0}Ci,j1C_{i,j-1} 的每一项都符合上面的规律,要证 Ci,jC_{i,j} 也符合上面的规律。
  1. j=0j = 0j=ij = i 时,由 C[n][0] = 1;C[n][n] = 1; 可得命题成立。
  2. 否则由 C[n][k] = C[n][k - 1] + C[n - 1][k - 1]; 可以得出,Ci,j=Ci1,j1+Ci,j1=2j1+2j1=2jC_{i,j} = C_{i-1,j-1} + C_{i,j-1} = 2^{j-1} + 2^{j-1} = 2^j,即命题对 Ci,jC_{i,j} 成立。
所以命题成立。
Code:
CPP
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
int T,k;
long long Pow[100005];
void init()
{
	Pow[0] = 1;
	for(int i = 1;i < 100000;i++) Pow[i] = (Pow[i-1] << 1)%mod;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> T;
	init();
	for(int i = 1;i <= T;i++) cin >> k;
	for(int i = 1;i <= T;i++)
	{
		cin >> k;
		cout << Pow[k] << "\n";
	}
	return 0;
}

评论

4 条评论,欢迎与作者交流。

正在加载评论...