zoukankan      html  css  js  c++  java
  • LOJ#6501. 「雅礼集训 2018 Day4」Cube 题解

    题目链接

    答案为 (inom{n}{m} imes 2^{n-m})

    证明1 :

    考虑枚举(m)维作为超立方体,令剩余的(n-m)维在(0/1)中任意选择,方案即为选出(m)维的方案和(n-m)维选择(0/1)的方案的乘积即(inom{n}{m} imes 2^{n-m})

    证明2 :

    首先 (f_{1,1} = 1,f_{1,x(x>1)} = 0.)

    对于 (f_{n(n>1),m},) 我们尝试寻找其递推式。

    不难发现我们要么是当前一维拿来确定,即在两个(n-1)维超立方体中找出(m-1)维超立方体的方案数,为 (f_{n-1,m-1}.)

    或者我们直接递归到两个子超立方体中,此时的答案为 (2f_{n-1,m}.)

    不难发现答案即为([x^m](2x+1)^n = inom{n}{m} imes 2^{n-m}.)

    code :

    #include <bits/stdc++.h>
    #define LL long long
    using namespace std;
    template <typename T> void read(T &x){
    	static char ch; x = 0,ch = getchar();
    	while (!isdigit(ch)) ch = getchar();
    	while (isdigit(ch)) x = x * 10 + ch - '0',ch = getchar();
    }
    inline void write(int x){if (x > 9) write(x/10); putchar(x%10+'0'); }
    const int P = 998244353,N = 100005;
    int fac[N],inv[N],nfac[N],pw[N];
    inline int C(int n,int m){ return (LL)fac[n] * nfac[m] % P * nfac[n-m] % P; }
    int main(){
    	int i;
    	fac[0] = nfac[0] = inv[0] = fac[1] = nfac[1] = inv[1] = pw[0] = 1; pw[1] = 2;
    	for (i = 2; i <= 100000; ++i)
    		pw[i] = pw[i-1] * 2 % P,fac[i] = (LL)fac[i-1] * i % P,inv[i] = (LL)(P-P/i) * inv[P%i] % P,nfac[i] = (LL)nfac[i-1] * inv[i] % P;
    	int T,n,m;
    	read(T);
    	while (T--) read(n),read(m),write((LL)C(n,m) * pw[n-m] % P),putchar('
    ');
    	return 0;
    }
    
  • 相关阅读:
    poj2942 点-双联通+二分图染色
    poj1523割顶-点双联通
    poj3694 边-双连通分量+lca
    poj3177边-双连通分量
    poj3352 边-双联通分量
    Codeforces Round #377 (Div. 2) F
    Educational Codeforces Round 30D. Merge Sort
    洛谷p3369 treap
    hdu3572线性欧拉筛
    HYSBZ
  • 原文地址:https://www.cnblogs.com/s-r-f/p/13620770.html
Copyright © 2011-2022 走看看