問題一覧 > 通常問題

No.3146 RE: Parentheses Counting

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 30
作問者 : Nauclhlt🪷 / テスター : 👑 p-adic
0 ProblemId : 12025 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2025-05-15 08:31:10

ストーリー

今回は $N$ が大きいみたいです。

問題文

対応が取れた括弧列の定義

文字列 $X$ が対応が取れた括弧列であるとは、次を満たすことをいいます。

  • $X$ に連続部分文字列として含まれる()を削除する操作を $0$ 回以上繰り返して $X$ を空文字列とすることができる

例えば()(())()()()()対応が取れた括弧列ですが、))(()()()(などは対応が取れた括弧列ではありません。


ある対応が取れた括弧列 $T$ に対して、次の手続きを行った後の $x$ の値を $f(T)$ とします。

  • はじめ、$S$ を空集合、$x=0$ として、$i=1, 2, \cdots, N$ の順に次を行う
    • $T_i=$(ならば、$S$ に $i$ を追加する
    • $T_i=$)ならば、$S$ に含まれる最大の元を $j$ として、$T$ の開区間 $(j, i)$ を取り出した文字列に連続部分文字列として含まれる()の個数を $x$ に加算する。その後、$S$ から $j$ を取り除く

例えば、$f($()(())$)=1, f($(()()())$)=3$ です。

正整数 $N$ が与えられるので、長さ $N$対応が取れた括弧列 $S$ として考え得るすべての文字列に対する $f(S)$ の総和を求めてください。
答えは非常に大きくなることがあるので、$998244353$ で割った余りを求めてください。

$T$ ケース与えられるので、それぞれのケースに対して答えてください。

文字列に関する表記 ある文字列 $A$ について、$A$ の長さを $|A|$ としたとき、$A_i(1\leq i\leq |A|)$ で $A$ の $i$ 文字目を表します。

入力

$T$
$case_1$
$case_2$
$\vdots$
$case_T$

$case_i$ は $i$ 番目のケースを表し、次の形式で与えられます。

$N$
  • $1\leq T\leq 10^5$
  • 各ケースに対して$1\leq N\leq 10^6$

出力

$T$ 行出力してください。$k(1\leq k\leq T)$ 行目には、$k$ 個目のケースに対する答えを出力してください。
各ケースに対しては、$f(S)$ の総和を $998244353$ で割った余りを $r$ として、以下の形式で出力してください。

$r$

最後に改行してください。

サンプル

サンプル1
入力
3
4
2
11
出力
1
0
0

例えば、1つ目のケースについて、長さが $4$ である対応が取れた括弧列()()(())の2つです。$f($()()$)=0, f($(())$)=1$ より、1を出力します。

3つ目のケースについて、長さが $11$ である対応が取れた括弧列は存在しません。よって0を出力します。

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。