問題一覧 > 通常問題

No.2720 Sum of Subarray of Subsequence of...

レベル : / 実行時間制限 : 1ケース 4.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 15
作問者 : ecottea / テスター : akakimidori hamamu
9 ProblemId : 10587 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2024-03-25 19:32:51

問題文

長さ NN の数列 A=(A1,A2,,AN)A = (A_1, A_2, \ldots, A_N) と,as のみからなる長さ MM の文字列 SS が与えられます.SS の左から ii 番目の文字を SiS_i と表します.

与えられた数列に対して整数を返す関数 f0,,fMf_0, \ldots, f_M を以下のように定めます:

  • 数列 BB に対し,f0(B)f_0(B)BB の要素の総和とする.
  • 1iM1 \leq i \leq M を満たす ii と数列 BB に対し,
    • Si=S_i= a のとき,fi(B)f_i(B)BB の空でない連続部分列 CC 全てをわたる fi1(C)f_{i-1}(C) の総和とする.
    • Si=S_i= s のとき,fi(B)f_i(B)BB の空でない(連続とは限らない)部分列 CC 全てをわたる fi1(C)f_{i-1}(C) の総和とする.

fM(A)f_M(A) を求めてください.答えは非常に大きくなることがあるので,答えを 998244353998244353 で割った余りを出力してください.

ただし部分列,連続部分列ともに,数列として等しい場合でも選んだ要素の添字の集合が異なれば区別します.

制約

  • 1N1051 \leq N \leq 10^5
  • 1M1051 \leq M \leq 10^5
  • 0Ai<9982443530 \leq A_i < 998244353
  • SSas のみからなる長さ MM の文字列
  • 入力される数値は全て整数

入力

入力は以下の形式で標準入力から与えられます.

N MN \ M
A1  ANA_1 \ \ldots \ A_N
SS

出力

答えを 998244353998244353 で割った余りを出力してください. 最後に改行してください.

サンプル

サンプル1
入力
3 2
1 2 3
as
出力
50

S2=S_2= s なので f2(A)f_2(A)AA の空でない部分列 BB 全てをわたる f1(B)f_1(B) の総和となり, f2(A)=f1((1,2,3))+f1((1,2))+f1((1,3))+f1((2,3))+f1((1))+f1((2))+f1((3)) f_2(A) = f_1((1, 2, 3)) + f_1((1, 2)) + f_1((1, 3)) + f_1((2, 3)) + f_1((1)) + f_1((2)) + f_1((3)) です.S1=S_1= a なので f1(B)f_1(B)BB の空でない連続部分列 CC 全てをわたる f0(C)=(Cの要素の総和)f_0(C) = (C \text{の要素の総和}) の総和となり,各項の値は

  • f1((1,2,3))=f0((1,2,3))+f0((1,2))+f0((2,3))+f0((1))+f0((2))+f0((3))=6+3+5+1+2+3=20f_1((1, 2, 3)) = f_0((1, 2, 3)) + f_0((1, 2)) + f_0((2, 3)) + f_0((1)) + f_0((2)) + f_0((3)) = 6 + 3 + 5 + 1 + 2 + 3 = 20
  • f1((1,2))=f0((1,2))+f0((1))+f0((2))=3+1+2=6f_1((1, 2)) = f_0((1, 2)) + f_0((1)) + f_0((2)) = 3 + 1 + 2 = 6
  • f1((1,3))=f0((1,3))+f0((1))+f0((3))=4+1+3=8f_1((1, 3)) = f_0((1, 3)) + f_0((1)) + f_0((3)) = 4 + 1 + 3 = 8
  • f1((2,3))=f0((2,3))+f0((2))+f0((3))=5+2+3=10f_1((2, 3)) = f_0((2, 3)) + f_0((2)) + f_0((3)) = 5 + 2 + 3 = 10
  • f1((1))=f0((1))=1f_1((1)) = f_0((1)) = 1
  • f1((2))=f0((2))=2f_1((2)) = f_0((2)) = 2
  • f1((3))=f0((3))=3f_1((3)) = f_0((3)) = 3

と計算できます.以上より f2(A)=20+6+8+10+1+2+3=50 f_2(A) = 20 + 6 + 8 + 10 + 1 + 2 + 3 = 50 となります.

サンプル2
入力
10 7
3 1 4 1 5 9 2 6 5 3
assasas
出力
671269716

998244353998244353 で割った余りを出力してください.

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