1015シミュレーションゲーム

EDITORIAL

突然、数論のテスト今日(少し無知霧..

人々は非常に興味深いトピックですts.png

T1オムレツの疑問(excatalan)

リンク

アイデア

\ -テーマ名を見て(\にexcatalan \)拡張\(カタロニア\) /クラス\(カタロニア\)

だから、(カタロニア\)\列の数をしたいです

そのためのが見つかりました\(0メートル= \)する場合、\(excatalanアンス=(N、0)?\)

他の場合には、\(excatalanアンス=(N、M)-excatalan(N- ,. 1-M)?\)

私に聞かないでください、私は知りません。

私は、私は知りません。

知りません。

......

検査室コードを接続します。

見つかった負のレポートを測定した後。ts.png

だから、訂正します

コード

//报负
ll f[maxn<<1],inv[maxn<<1];
inline ll power(int a,int b){
    ll ans=1;
    for(;b;b>>=1){
        if(b&1) ans=(ll)ans*a%mod;
        a=(ll)a*a%mod; 
    }
    return ans;
}
inline ll Cal(int x,int y){
    if(x<y) return 0;
    if(x<0||y<0) return 0;
    return (ll)f[x]*inv[y]%mod*inv[x-y]%mod;
}
inline ll C(int x,int y){
    return (ll)(Cal(x*2,x)-Cal(x*2,x-y-1))%mod; 
}
int main(){
//  freopen(File".in","r",stdin);
//  freopen(File".out","w",stdout);
    int n=read(),m=read();
    f[0]=1; 
    for(int i=1;i<=n*2;i++) f[i]=f[i-1]*i%mod;
    inv[n*2]=power(f[n*2],mod-2);
    for(int i=n*2;i;i--) inv[i-1]=inv[i]*i%mod;      
    if(m==0) printf("%lld",C(n,0));
    else printf("%lld",(C(n,m)-C(n,m-1)+mod)%mod);
    return 0;
} 
ll f[maxn<<1],inv[maxn<<1];
inline ll power(int a,int b){
    ll ans=1;
    for(;b;b>>=1){
        if(b&1) ans=(ll)ans*a%mod;
        a=(ll)a*a%mod; 
    }
    return ans;
}
inline ll Cal(int x,int y){
    if(x<y) return 0;
    if(x<0||y<0) return 0;
    return (ll)f[x]*inv[y]%mod*inv[x-y]%mod;
}
inline ll C(int x,int y){
    return (ll)(Cal(x*2,x)-Cal(x*2,x-y-1)+mod)%mod; 
}
int main(){
//  freopen(File".in","r",stdin);
//  freopen(File".out","w",stdout);
    int n=read(),m=read();
    f[0]=1; 
    for(int i=1;i<=n*2;i++) f[i]=f[i-1]*i%mod;
    inv[n*2]=power(f[n*2],mod-2);
    for(int i=n*2;i;i--) inv[i-1]=inv[i]*i%mod;      
    if(m==0) printf("%lld",C(n,0));
    else printf("%lld",(C(n,m)-C(n,m-1)+mod)%mod);
    return 0;
} 

T2蘑菇(shimeji)

リンク

アイデア

質問には回答:キノコは、毎日の擬態レジャー.GIF

この質問は混乱の所望の程度を作るしようとしている、CB期待しない\(QAQ \)

だから私は、無作為化、出力サンプルと呼ばれます。youl.pngyoul.png

コード

T3の壁(ウォール)

リンク

アイデア

セット([I] \ F)\代表\([I] \)エンドポイントとして、より大きい数\([I] \)プログラム番号。\(G [i]が\)未満の代わりに数\([I] \)プログラム番号。場合トランスファプレス\([I] \)昇順列挙\(Iは\) 次いで\([J] \)降順列挙\(J \) もし\(J \ I LT \)\(F [J] \)更新\(G [i]が\) または有する\(G [i]が\)更新F \([J] \)

時間複雑\(O(^ N-2)\) スペース\(O(N)\)

その後、なくなって劇場の.jpg

コード

int n,mod,ans;
int f[maxn],g[maxn];
int a[maxn],b[maxn];
inline void change(int &x,int y){
    x+=y;
    if(x>=mod) x-=mod;
}
int main(){
//  freopen(File".in","r",stdin);
//  freopen(File".out","w",stdout);
    n=read(); mod=read();
    for(int i=1;i<=n;i++){
        a[i]=read();
        b[a[i]]=i;  
    }
    //mem(f,1); mem(g,0);//不知道为什么,我宏定义的memset挂了。。。
    for(int i=1;i<=n;i++) f[i]=1,g[i]=0;
    for(int i=1;i<=n;i++)
    for(int j=i-1;j;j--)
    if(b[j]<b[i]) change(f[i],g[j]);
    else change(g[j],f[i]);
    for(int i=1;i<=n;i++) change(ans,f[i]);
    
    //mem(f,0); mem(g,1);
    for(int i=1;i<=n;i++) f[i]=0,g[i]=1;
    for(int i=1;i<=n;i++)
    for(int j=i-1;j;j--)
    if(b[j]<b[i]) change(f[i],g[j]);
    else change(g[j],f[i]);
    for(int i=1;i<=n;i++) change(ans,g[i]);
    
    change(ans,mod-n%mod);
    printf("%d",ans);
    return 0;
}

\ [\クワッド終了\]

\ [\ {テキスト生命しかし、戦い。赤血球染色砂、若者に白い髪。真の英雄、どのように恐れている場合。 - "真の英雄" ディッキー} \]

おすすめ

転載: www.cnblogs.com/cbyyc/p/11682222.html