結果

問題 No.3099 Parentheses Decomposition
ユーザー ゼリトキ
提出日時 2025-04-11 21:58:43
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 375 ms / 2,000 ms
コード長 1,243 bytes
コンパイル時間 3,210 ms
コンパイル使用メモリ 276,104 KB
実行使用メモリ 7,848 KB
最終ジャッジ日時 2025-04-11 21:58:49
合計ジャッジ時間 5,113 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 20
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define ll long long
#define mod 998244353
long long power(long long a,long long b,long long m){
    long long p=a,Answer=1;
    for(long long i=0;i<60;i++){
        long long wari=(1LL<<i);
        if((b/wari)%2==1){
            Answer=(Answer*p)%m;
        }
        p=(p*p)%m;
    }
    return Answer;
}
long long Division(long long a,long long b,long long m){
    return (a*power(b,m-2,m))%m;
}
int main(){
    cin.tie(0)->sync_with_stdio(0);
    cout.tie(0);
    ll N;
    string S;
    cin>>N>>S;
    if(N==2){
        cout<<2<<endl;
        return 0;
    }
    ll ruijou[500009];
    ll p=1;
    ruijou[0]=1;
    for(int i=1;i<=N;i++){
        p*=i;
        p%=mod;
        ruijou[i]=p;
    }
    if(S.at(0)=='(' && S.at(1)=='('){
        ll n=N/2;
        ll ans=0;
        for(ll i=1;i<=n;i++){
            ll wari=ruijou[i]*ruijou[n-i];
            wari%=mod;
            ll c=Division(ruijou[n],wari,mod);
            c*=c;
            c%=mod;
            ans+=c;
            ans%=mod;
        }
        ans++;
        cout<<ans<<endl;
    }
    else{
        ll n=N/2;
        ll ans=power(2,n,mod);
        cout<<ans<<endl;
    }
}
0