zoukankan      html  css  js  c++  java
  • poj 1430 Binary Stirling Number 求斯特林数奇偶性 数形结合| 斯特林数奇偶性与组合数的关系+lucas定理 好题

    题目大意

    求子集斯特林数(left{egin{matrix}n\mend{matrix} ight}\%2)

    方法1 数形结合

    推荐一篇超棒的博客by Sdchr
    就是根据斯特林的递推式,分奇偶讨论
    得到一个函数(P_{n,m}equivleft{egin{matrix}n\mend{matrix} ight}\% 2)
    再根据函数递推式通过画图,数形结合
    转化成图中从一点走到另一点的方案数
    变成组合问题求解

    做法

    这是给连插板都不会的我看的
    (a_1+a_2+...+a_n=D,a_ige0)
    大于等于0这个条件难易插板
    我们变成
    ((a_1+1)+(a_2+1)+...+(a_n+1)=D+n,(a_i+1)ge1)
    就变成(D+n-1)个空隙插(n-1)块板了

    姿势

    要求阶乘中有多少个二的因子
    就是(2^1)的倍数个数+(2^2)的倍数个数+(2^3)的倍数个数

    LL num(int x){
    	LL res=0;
    	for(int i=2;i<=x;i<<=1) res+=x/i;
    	return res;
    }
    

    solution

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cctype>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    typedef long long LL;
    const int Q=1000000007;
    const int M=2003;
    
    inline LL rd(){
    	LL x=0;bool f=1;char c=getchar();
    	for(;!isdigit(c);c=getchar()) if(c=='-') f=0;
    	for(;isdigit(c);c=getchar()) x=x*10+c-48;
    	return f?x:-x;
    }
    
    int tcas;
    LL n,m,D,odd;
    
    LL num(int x){
    	LL res=0;
    	for(int i=2;i<=x;i<<=1) res+=x/i;
    	return res;
    }
    
    int Calc(int x,int y){
    	return num(x)-num(y)-num(x-y) == 0;
    }
    
    int main(){
    	
    	int i;
    	tcas=rd();
    	while(tcas--){
    		n=rd(),m=rd();
    		D=n-m;
    		odd=(m+1)/2;
    		printf("%d
    ",Calc(D+odd-1,odd-1));
    	}
    	return 0;
    }
    

    方法二 斯特林数mod 2意义下与组合数关系+lucas定理

    (left{egin{matrix}n\mend{matrix} ight}=dbinom {z}{w})

    其中(z=lceil n-frac {m+1} 2 ceil,w=lfloor frac {m-1} 2 floor)

    而又有结论(dbinom n m\%2=[n)&(m=m])

    为什么,用lucas定理证一下

    (dbinom n mequiv dbinom {n\%2}{m\%2}dbinom{n/2}{m/2}(mod 2))

    注意到这一项(dbinom {n\%2}{m\%2})

    我们把n,m转为二进制

    (inom0 1=0),则若(n_i=0)(m_i=1),则(inom n mequiv 0(mod 2))
    (inom1 0=inom 1 1=1),则若(n_i=1),无论(m_i)为0还是1对奇偶性无影响

    所以有结论
    (dbinom n m\%2=[n)&(m=m])

  • 相关阅读:
    用javascript获取屏幕高度和宽度等信息
    Delphi程序启动参数的读取
    在CSS中使用javascript运算表达式
    How to check an Internet connection
    CheckMenuItem Function in Delphi
    在delphi中添加一个菜单项到Windows的系统菜单
    Delphi中直接将DataSet中的数据写入Excel文件
    带有TClientDataSet的delphi应用程序在发布时应注意的问题
    Delphi下一个封装较为完整的DBGrid>Excel类
    how to advertent to connect to internet?
  • 原文地址:https://www.cnblogs.com/acha/p/6443647.html
Copyright © 2011-2022 走看看