zoukankan      html  css  js  c++  java
  • [POJ3734]Blocks

    题目链接:

    POJ3734

    因为不同的排列算不同的方案,所以要用到指数生成函数。

    有偶数个的颜色生成函数为:(sum_{i=2j,jinmathbb{N}}limits frac{x^i}{i!})

    随意个数的颜色生成函数则为(sum_{i=0}^inftylimits frac{x^i}{i!})

    那么乘起来:

    [(sum_{i=2j,jinmathbb{N}}frac{x^i}{i!})^2(sum_{i=0}^infty frac{x^i}{i!})^2 ]

    后者即为(e^{2x})

    然后是对前一项的推导:

    (e^x=1+x+frac{x^2}{2!}+frac{x^3}{3!}+frac{x^4}{4!}+cdots)

    (e^{-x}=1-x+frac{x^2}{2!}-frac{x^3}{3!}+frac{x^4}{4!}-cdots)

    那么有(e_x+e^{-x}=2(sum_{i=2j,jinmathbb{N}}limits frac{x^i}{i!}))

    所以最终整个题目的生成函数为:((frac{e^x+e^{-x}}{2})^2e^{2x})

    化简得(frac{e^{4x}+2e^{2x}+1}{4})

    常数项忽略,(e^{kx})(n)次项系数为(frac{k^n}{n!})

    代入得(frac{4^n+2^{n+1}}{4n!})

    (n!)乘回去,最终有(frac{4^n+2^{n+1}}{4}=4^{n-1}+2^{n-1})

    快速幂即可。

    时间复杂度 (O(Tlog_2n))

    代码:

    #include <cstdio>
    typedef long long ll;
    
    int t,n;
    const int Mod=10007;
    
    int Pow(int a,int b)
    {
    	int Res=1;
    	for(;b;b>>=1,a=a*a%Mod)
    		if(b&1)Res=Res*a%Mod;
    	return Res%Mod;
    }
    
    int main()
    {
    	for(scanf("%d",&t);t--;)
    	{
    		scanf("%d",&n);
    		printf("%d
    ",(Pow(4,n-1)+Pow(2,n-1))%Mod);
    	}
    	return 0;
    }
    
  • 相关阅读:
    Judy alpha 第九天
    Judy alpha 第八天
    Judy alpha 第七天
    Judy alpha 第六天
    Judy alpha 第五天
    Judy alpha 第四天
    Fieldtrip 和 spm 文件读取
    matlab更改打开时候默认路径
    mne-python 安装大法
    Greenhouse-Geisser;统计结果报告;效应力大小介绍
  • 原文地址:https://www.cnblogs.com/LanrTabe/p/10488639.html
Copyright © 2011-2022 走看看