問題一覧 > 通常問題

No.2144 MM

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 61
作問者 : milkcoffee / テスター : first_vil nok0
10 ProblemId : 8776 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2022-11-25 22:34:15

問題文

正整数 N,MN,M が与えられます。

与えられた N,MN,M に対して、 良い数列 を以下のように定義します。

  • 長さ NN であり、各要素が 00 以上 M2M-2 以下 である。
  • 以下の操作を繰り返す(何回でも良い)ことで、全ての要素を MM の倍数にすることができる。
    • 隣接する 22 要素を選び、それぞれに 11 を加算する。

長さ NN の非負整数列 AA が与えられるので、それが良い数列かどうかを判定してください。

また、良い数列だった場合は、良い数列の中で辞書順で何番目かを 998244353998244353 で割ったあまりを求めてください。

入力

NN MM
A1A_1 A2A_2 \cdots ANA_N

  • 2N2×1052 \leq N \leq 2 \times 10^5
  • 3M1063 \leq M \leq 10^6
  • 0AiM20 \leq A_i \leq M-2 (1iN)(1 \leq i \leq N)
  • 入力は全て整数である

出力

非負整数列 AA が良い数列であれば、それが良い数列の中で辞書順で何番目かを 998244353998244353 で割ったあまりを整数で出力してください。
良い数列でなければ -1 を出力してください。

サンプル

サンプル1
入力
3 5
2 0 3
出力
8

N=3,M=5N=3,M=5 であるとき、良い数列を辞書順に 88 番目まで並べると以下のようになります。
(0,0,0),(0,1,1),(0,2,2),(0,3,3),(1,1,0),(1,2,1),(1,3,2),(2,0,3)(0,0,0),(0,1,1),(0,2,2),(0,3,3),(1,1,0),(1,2,1),(1,3,2),(2,0,3)

(2,0,3)(2,0,3) に対して「1,21,2 番目の要素に 11 を加算する」という操作を 33 回行うと (5,3,3)(5,3,3) になります。
そして、(5,3,3)(5,3,3) に対して「2,32,3 番目の要素に 11 を加算する」という操作を 22 回行うと (5,5,5)(5,5,5) になります。
全ての要素を 55 の倍数にすることができたため、 (2,0,3)(2,0,3) は良い数列と言えます。

サンプル2
入力
2 1000000
0 1
出力
-1

1,21,2 番目の要素の両方を 10000001000000 の倍数にすることはできないため、(0,1)(0,1) は良い数列ではないです。

サンプル3
入力
15 840067
703190 347257 169927 111976 170201 451648 473561 341367 803725 263056 785072 155864 274520 420688 391794
出力
293678726

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