国庆のsurprise

T4

不要问我为什么上来就写T4。奋战半个下午搞出来了。joke3579神来一笔。
首先您得先知道高等数学是个什么东西。如果不知道请右上角。
然后我们相当于要求 i=0(ik)2xi 的封闭形式,然后把 x=12 代进去就行。手算一下可以发现这玩意是收敛的。
然后考察这玩意怎么求。首先我们知道 (ik)=ikk! 。然后把下面的常数项 k! 拿出来,变成

i=0(ik)2xi

然后我们知道 i=0ikxi 的封闭形式。怎么求?
i=0xik 阶导,然后发现这个生成函数的 xn 次项就是 i=nn+k1i=nk 。然后把这个东西的每个系数往右平移 k 就变成了 nk 。怎么平移?乘个 xk 。不理解可以自己手模。
然后我们知道 i=0xi=11X 。所以我们设这个东西是 F(x) ,那么我们刚才讨论的就是 G(x)=xkF(k)(x) 。随便设了个字母。
于是回到我们的问题,我们要求的带着平方。这个好办,我们现在只需要再乘一个 ik 就行了。再求 k 阶导然后乘个 xk 就行了。所以我们现在的问题就是:怎么求

xkG(k)(x)

幸运的是,我们有(joke3579给出灵感的)莱布尼茨公式:

(uv)(k)=i=0k(ki)u(i)v(ki)

然后我们发现 G(x)=xk×k!(1x)k+1 。套用上式即可。

/*我以为我T2切了 然后写不出来
我以为T3很水 然后压根没写
现在我以为T4一定有比手算求导更优美且简洁的方法*/
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const int mod=1000000007,x=(mod+1)>>1;
int n,ans,a[2000010],jc[2000010],inv[2000010],p[2000010],invp[2000010];
int qpow(int a,int b){
    int ans=1;
    while(b){
        if(b&1)ans=1ll*ans*a%mod;
        a=1ll*a*a%mod;
        b>>=1;
    }
    return ans;
}
int C(int n,int m){
    return 1ll*jc[n]*inv[m]%mod*inv[n-m]%mod;
}
int f(int x,int k){
    return 1ll*jc[n]*inv[n-k]%mod*qpow(x,n-k)%mod;
}
int g(int x,int k){
    return 1ll*jc[n+k]*inv[n]%mod*qpow(x,n+k+1)%mod;
}
int main(){
    scanf("%d",&n);jc[0]=inv[0]=1;
    if(n==0){
        printf("1\n");return 0;
    }
    for(int i=1;i<=2*n;i++)jc[i]=1ll*jc[i-1]*i%mod;
    inv[2*n]=qpow(jc[2*n],mod-2);
    for(int i=2*n-1;i>=1;i--)inv[i]=1ll*inv[i+1]*(i+1)%mod;
    for(int i=0;i<=n;i++){
        ans=(ans+1ll*C(n,i)*f(x,n-i)%mod*g(2,i)%mod)%mod;
    }
    printf("%lld\n",1ll*ans*qpow(x,n)%mod*inv[n]%mod);
}

高等数学基础还是不扎实。

posted @   gtm1514  阅读(163)  评论(13编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示