No.3099 Parentheses Decomposition
レベル :  / 実行時間制限 : 1ケース 2.000秒 / メモリ制限
            : 512 MB / 標準ジャッジ問題
            
タグ : / 解いたユーザー数 96
作問者 : shobonvip
            
            / テスター :
shobonvip
            
            / テスター :
            
             noya2
noya2
            
            
        
        
        タグ : / 解いたユーザー数 96
作問者 :
 shobonvip
            
            / テスター :
shobonvip
            
            / テスター :
            
             noya2
noya2
            
            
        問題文最終更新日: 2025-04-11 21:19:22
        
        
            コンテストの他の問題:
            
        
        
        問題文
正しいカッコ列を、次の条件のいずれかを満たす文字列と定めます。
- 空文字列
- 正しいカッコ列 $A$ が存在して ($A$)をこの順につなげたもの
- 空でない正しいカッコ列 $A, B$ が存在して $A, B$ をこの順につなげたもの
たとえば (())() は正しいカッコ列であり、 ()( や )( は正しいカッコ列ではありません。
正の偶数 $N$ に対して、長さ $N$ のA型の正しいカッコ列を次のように定めます。
- $1 \le i \le N/2$ に対し $S_i$ は (
- $N/2+1 \le i \le N$ に対し $S_i$ は )
たとえば、 (())、 ((((())))) は A型の正しいカッコ列です。
正の偶数 $N$ に対して、長さ $N$ のB型の正しいカッコ列を次のように定めます。
- $i$ が奇数のとき $S_i$ は (
- $i$ が偶数のとき $S_i$ は )
たとえば、 ()()、 ()()()()() は B型の正しいカッコ列です。
長さ $N$ の A型 または B型 の正しいカッコ列 $S$ が与えられます。$0, 1$ からなる長さ $N$ の列 $T$ であって、次の条件を満たすものの個数を求めてください。
- $T_i = 0$ となる整数 $i$ $(1\le i \le N)$ がある場合、$T_i = 0$ となる $i$ を昇順に $P_1, \cdots, P_k$ とする。 $S_{P_1}, \cdots, S_{P_k}$ を順につなげたものを $X$ とすると、 $X$ は正しいカッコ列である。
- $T_i = 1$ となる整数 $i$ $(1\le i \le N)$ がある場合、$T_i = 1$ となる $i$ を昇順に $Q_1, \cdots, Q_l$ とする。 $S_{Q_1}, \cdots, S_{Q_l}$ を順につなげたものを $Y$ とすると、 $Y$ は正しいカッコ列である。
ただし、答えは非常に大きくなる場合があるため、 $998244353$ で割った余りを出力してください。
制約
- $2 \le N \le 5\times 10^5$
- $N$ は偶数である
- $S$ は A型 または B型 の正しいカッコ列である
入力
$N$ $S$
出力
答えを出力してください。
サンプル
サンプル1
入力
4 (())
出力
6
入力の文字列は A 型の正しいカッコ列です。条件を満たす $T$ と、対応する $X$, $Y$ は次のようになります。
| $T$ | $X$ | $Y$ | 
|---|---|---|
| 0000 | (()) | なし | 
| 0101 | () | () | 
| 0110 | () | () | 
| 1001 | () | () | 
| 1010 | () | () | 
| 1111 | なし | (()) | 
サンプル2
入力
4 ()()
出力
4
入力の文字列は B 型の正しいカッコ列です。
サンプル3
入力
2 ()
出力
2
入力の文字列は A 型かつ B 型の正しいカッコ列です。
サンプル4
入力
40 (((((((((((((((((((())))))))))))))))))))
出力
88808106
$998244353$ で割った余りを出力してください。
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。
