2020牛客暑期多校训练营 分部积分 [Easy Integration]

2020牛客暑期多校训练营 分部积分 Easy Integration

题目大意:

给你一个积分函数,让你计算

题解:

这个题目真的让我非常惊讶,一开始想到了要分部积分求这个定积分然后求解,但是想想如果这样不就是一个数学题目了吗?于是就没有写,最后发现还真是一个数学题目,晕。

这个题目用分部积分的公式很好写。

[int uv' dx = uv + int vu' dx ]

按照上面的公式,你会发现因为上下限是01,所以前面的 (uv=0) ,然后后面的就是一个的指数在上升一个的指数在下降,所以按照这样下去,就可以把一个x的指数一直往下降,降到1,就可以进行积分求解了。

最后求解出来的公式就是 (frac{n!}{(2n+n)!})

这个就可以预处理一下,然后直接得出答案。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e6+10;
const int mod = 998244353;
typedef long long ll;
ll f[maxn];

void init(){
    f[0]=1;
    for(int i=1;i<maxn;i++) f[i]=f[i-1]*i%mod;
}

long long inv(long long x,long long mod)
{
    long long k=mod-2,ans=1;
    while(k)
    {
        if (k&1) ans=ans*x%mod;
        x=x*x%mod;
        k>>=1;
    }
    return ans;
}

int main(){
    int n;
    init();
    while(scanf("%d",&n)!=EOF){
        ll x = f[n]*f[n]%mod;
        ll y = inv(f[2*n+1],mod)%mod;
        printf("%lld
",x*y%mod);
    }

}
原文地址:https://www.cnblogs.com/EchoZQN/p/13289732.html