問題一覧 > 通常問題

No.3052 Increasing Sliding Window Minimum

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 19
作問者 : suisen / テスター : hamamu 👑 rin204
1 ProblemId : 10653 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2025-01-25 15:04:22

問題文

22 以上の整数 nn と長さ nn の整数列 A=(A1,A2,,An)A=(A_1,A_2,\ldots,A_n) が与えられます。ここで、全ての i=1,2,,ni=1,2,\ldots,n について Ai=1A_i=-1 または 1Ain1\leq A_i\leq n が成り立ちます。

(1,2,,n)(1,2,\ldots,n) の順列 P=(P1,P2,,Pn)P=(P_1,P_2,\ldots,P_n) のうち、以下の条件を全て満たすものの個数を 998244353998244353 で割った余りを求めてください。

  • 全ての 11 以上 nn 以下の整数 ii について、Ai1A_i\neq -1 ならば Pi=AiP_i=A_i である
  • 全ての 11 以上 n2n-2 以下の整数 ii について、min(Pi,Pi+1)min(Pi+1,Pi+2)\min(P_i,P_{i+1})\leq \min(P_{i+1},P_{i+2}) である

1 つのファイルにつき TT 個のテストケースが与えられるので、その全てに対して上記の問題を解いてください。

入力

入力は以下の形式で標準入力から与えられる。

TT
testcase1\mathrm{testcase}_1
testcase2\mathrm{testcase}_2
\vdots
testcaseT\mathrm{testcase}_T

ここで testcasei\mathrm{testcase}_iii 番目のテストケースを表し、以下の形式で与えられる。

nn
A1A_1 A2A_2 \cdots AnA_n
  • 入力は全て整数で与えられる
  • 1T50001\leq T\leq 5000
  • 2n50002\leq n\leq 5000
  • Ai=1A_i=-1 または 1Ain1\leq A_i\leq n
  • iji\neq j なる i,ji,j に対して、Ai1,Aj1A_i\neq -1, A_j\neq-1 ならば AiAjA_i\neq A_j
  • TT 個のテストケースにわたる nn の総和は 50005000 以下

出力

TT 行出力してください。i (1iT)i\ (1\leq i\leq T) 行目には ii 番目のテストケースに対する答えを出力してください。TT 行目の出力の後も改行してください。

サンプル

サンプル1
入力
4
3
-1 2 -1
5
3 -1 2 -1 -1
5
5 4 3 2 1
20
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
出力
1
2
0
799043977
  • 1 つ目のテストケースについて
    この入力は n=3, A=(1,2,1)n=3,\ A=(-1,2,-1) を表します。

    P=(1,2,3)P=(1,2,3) は条件を満たす唯一の順列です。従って答えとして 11 を出力してください。

    P=(3,2,1)P=(3,2,1) は 1 つめの条件を満たしますが、min(P1,P2)=2>min(P2,P3)=1\min(P_1,P_2)=2\gt \min(P_2,P_3)=1 より 2 つめの条件を満たしません。

    P=(2,1,3)P=(2,1,3) は 2 つめの条件を満たしますが、A21A_2\neq -1 かつ P2A2P_2\neq A_2 より 1 つめの条件を満たしません。

  • 3 つ目のテストケースについて
    条件を満たす順列 PP が存在しないこともあります。

  • 4 つ目のテストケースについて
    998244353998244353 で割った余りを出力する必要があることに注意してください。

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