A: Little Sub and Pascal's Triangle
Solved.
题意:
求杨辉三角第n行奇数个数
思路:
薛聚聚说找规律,16说Lucas
答案是 $2^p \;\;p 为 n - 1 中 以2进制表示下1的个数$
证明
$Ans = \sum\limits_0^n C_n^i \;\%\; 2 = \sum\limits_0^n C_{\frac{n}{2}}^{\frac{i}{2}} \cdot C_{n\;\%\;2}^{i\;\%\;2}$
我们考虑 $C_{n \;\%\; 2}^{i \;\%\; 2}$ 一共有四种取值
$C_0^0 \;\; C_0^1\;\; C_1^0 \;\; C_1^1$
我们发现 只有 $C_0^1的值为0 其他三个值都为1$
那么我们再考虑$C_n^i 这个式子$
它通过卢卡斯定理分解 实际上可以写成
我们先假设
$i 以二进制表示为$
$a_1, a_2, \cdots a_k$
$n 以二进制表示为$
$b_1, b_2, \cdots b_k$
那么 $C_n^i = C_{b_1}^{a_1} \cdot C_{b_2}^{a_2} \cdots C_{b_k}^{a_k}$
那么我们发现,
要满足$C_n^i\;\%\; 2 = 1 \;\;$
$那么在b_y = 1的位置上,i在对应位置上取0或者1都可以$
在$b_y = 0 的位置上,i在对应位置的取值已经固定 是 0$
那么$i的取值一共有2^p p 为(n - 1)以2进制表示下1的个数$
为什么是$n - 1 \;\;因为杨辉三角是从第0行开始的$
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 typedef long long ll; 6 7 ll n; 8 9 int main() 10 { 11 int t; 12 scanf("%d", &t); 13 while(t--) 14 { 15 scanf("%lld", &n); 16 n--; 17 ll tmp = 0; 18 while(n) 19 { 20 if(n & 1) tmp++; 21 n >>= 1; 22 } 23 ll ans = 1ll << tmp; 24 printf("%lld\n", ans); 25 } 26 return 0; 27 }