zoukankan      html  css  js  c++  java
  • CF1153F Serval and Bonus Problem

     Serval and Bonus Problem

    1.转化为l=1,最后乘上l

    2.对于一个方案,就是随便选择一个点,选在合法区间内的概率

    3.对于本质相同的所有方案考虑在一起,贡献就是合法区间个数/(2*n+1)

    4.运用条件概率或者直接解释,只需求出所有本质不同的方案的合法区间个数的和

    5.DP即可。

    #include<bits/stdc++.h>
    #define reg register int
    #define il inline
    #define fi first
    #define se second
    #define mk(a,b) make_pair(a,b)
    #define numb (ch^'0')
    using namespace std;
    typedef long long ll;
    template<class T>il void rd(T &x){
        char ch;x=0;bool fl=false;
        while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
        for(x=numb;isdigit(ch=getchar());x=x*10+numb);
        (fl==true)&&(x=-x);
    }
    template<class T>il void output(T x){if(x/10)output(x/10);putchar(x%10+'0');}
    template<class T>il void ot(T x){if(x<0) putchar('-'),x=-x;output(x);putchar(' ');}
    template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('
    ');}
    
    namespace Miracle{
    const int N=4008;
    const int mod=998244353;
    int n,k,l;
    int qm(int x,int y){
        int ret=1;
        while(y){
            if(y&1) ret=(ll)ret*x%mod;
            x=(ll)x*x%mod;
            y>>=1;
        }
        return ret;
    }
    int ad(int x,int y){
        return x+y>=mod?x+y-mod:x+y;
    }
    int f[N][N][2];
    int main(){
        rd(n);rd(k);rd(l);
        f[0][0][0]=1;
        for(reg i=1;i<=2*n+1;++i){
            for(reg j=0;j<=i;++j){
                for(reg x=0;x<=1;++x){
                    if(i+j+(1-x)<=2*n+1){
                        // cout<<i<<" "<<j<<" "<<x<<endl;
                        f[i][j][x]=ad(f[i][j][x],(ll)f[i-1][j+1][x]*(j+1)%mod);
                        if(j>0)f[i][j][x]=ad(f[i][j][x],f[i-1][j-1][x]);
                        if(x==1&&j>=k)f[i][j][x]=ad(f[i][j][x],f[i-1][j][0]);
                        // cout<<" val "<<f[i][j][x]<<endl;
                    }
                }
            }
        }
        // cout<<f[2*n+1][0][1]<<endl;
        ll jie=1;
        for(reg i=n+1;i<=2*n+1;++i) jie=(ll)jie*i%mod;
        ll ans=(ll)f[2*n+1][0][1]*qm(2,n)%mod*qm(jie,mod-2)%mod;
        cout<<(ll)ans*l%mod;
        return 0;
    }
    
    }
    signed main(){
        Miracle::main();
        return 0;
    }
    
    /*
       Author: *Miracle*
       Date: 2019/4/13 19:58:12
    */
  • 相关阅读:
    Python中读取文件中的json串,并将其写入到Excel表格中
    Python中替换敏感字
    Python写一个批量生成账号的函数
    解决MySQL不允许远程连接的问题
    Jenkins安装与配置
    Jmeter监听tomcat
    onlyoffice document docker版安装使用总结
    onlyoffice-DocumentServer 的权限验证
    docker 部署es
    docker部署graylog使用教程
  • 原文地址:https://www.cnblogs.com/Miracevin/p/10713639.html
Copyright © 2011-2022 走看看