码迷,mamicode.com
首页 > 其他好文 > 详细

CF1153F Serval and Bonus Problem

时间:2019-04-15 23:16:32      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:putc   register   lan   false   tps   while   put   const   bool   

 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(\n);}

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
*/

 

CF1153F Serval and Bonus Problem

标签:putc   register   lan   false   tps   while   put   const   bool   

原文地址:https://www.cnblogs.com/Miracevin/p/10713639.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!