問題一覧 > 教育的問題

No.2445 奇行列式

レベル : / 実行時間制限 : 1ケース 3.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 25
作問者 : 👑 p-adicp-adic / テスター : ShirotsumeShirotsume
2 ProblemId : 9397 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2023-07-30 13:10:44

注意

この問題の実行時間制限は3000[ms]です。

問題文

入力に 22 個の正整数 NNBB と、非負整数係数 NN 次正方行列 AA が与えられます。

 

NN 以下の各正整数 i,ji, j に対し、AA(i,j)(i,j) 成分を Ai,jA_{i,j} と置きます。

NN 次奇置換 σ\sigma 全体をわたる i=1NAi,σ(i)\prod_{i=1}^{N} A_{i,\sigma(i)} の総和を BB で割った余りを求めてください。

 

以下、奇置換について知らない人向けの説明をします。(クリックで開く)

 

正整数 nn に対し、nn 次の置換とは大雑把には nn 以下の正整数をシャッフルする関数のことです。より正確には以下のように定義されます:

 

定義(置換)

nn 以下の正整数全体の集合を InI_n と置く。nn 次の置換とは、 InI_n から InI_n への全単射な写像である。

 

aann 次の置換とします。aa が互換であるとは、大雑把には aa がちょうど 22 つの数を入れ替えるということです。より正確には、以下を満たす nn 以下の正整数 iijj が存在するということです:

  1. iji \neq j である。
  2. a(i)=ja(i) = j である。
  3. a(j)=ia(j) = i である。
  4. nn 以下の任意の正整数 kk に対し、kik \neq i かつ kjk \neq j ならば、a(k)=ka(k) = k である。

互換を用いて、偶置換と奇置換という概念を以下のように定めます:

  1. 偶数個の互換の合成で表せる nn 次の置換を、nn 次の偶置換と呼ぶ。
  2. 偶数個の互換の合成で表せない nn 次の置換を、nn 次の奇置換と呼ぶ。

ただし互換 00 個の合成は恒等置換として定義されます。従って恒等置換は偶置換です。

入力

入力は次の形式で標準入力から 1+N1 + N 行で与えられます:

  • 11 行目に N,BN, B が半角空白区切りで与えられます。
  • NN 以下の各正整数 ii に対し、1+i1 + i 行目に AA の第 ii 行の各成分が半角空白区切りで与えられます。
NN BB
A1,1A_{1,1} \cdots A1,NA_{1,N}
\vdots
AN,1A_{N,1} \cdots AN,NA_{N,N}

制約

入力は以下の制約を満たします:

  • NN1N201 \leq N \leq 20 を満たす整数である。
  • BB1B1091 \leq B \leq 10^9 を満たす整数である。
  • NN 以下の任意の正整数 i,ji, j に対し、Ai,jA_{i,j}0Ai,j10180 \leq A_{i,j} \leq 10^{18} を満たす整数である。

出力

NN 次奇置換 σ\sigma 全体をわたる i=1NAi,σ(i)\prod_{i=1}^{N} A_{i,\sigma(i)} の総和を BB で割った余りを求めてください。

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

サンプル

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

N=1N = 1 次の置換は恒等置換に限られ、恒等置換は偶置換です。従って求める総和は 00 であり、00B=2B = 2 で割った余りは 00 です。

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

22 次の置換は恒等置換と互換 (1,2)(1,2)22 つがあります。前者は偶置換であり後者は奇置換であるので、求める総和は

A1,2A2,1=2×3=6\displaystyle A_{1,2} A_{2,1} = 2 \times 3 = 6

です。66B=3B = 3 で割った余りは 00 です。

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

33 次の置換は 66 つあります。そのうち奇置換は互換 (1,2)(1,2)(1,3)(1,3)(2,3)(2,3)33 つあるので、求める総和は

A1,2A2,1A3,3+A1,3A2,2A3,1+A1,1A2,3A3,2=2×4×9+3×5×7+1×6×8=72+105+48=225\displaystyle A_{1,2} A_{2,1} A_{3,3} + A_{1,3} A_{2,2} A_{3,1} + A_{1,1} A_{2,3} A_{3,2} = 2 \times 4 \times 9 + 3 \times 5 \times 7 + 1 \times 6 \times 8 = 72 + 105 + 48 = 225

です。225225B=10B = 10 で割った余りは 55 です。

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