問題一覧 > 教育的問題

No.2443 特殊線形群の標準表現

レベル : / 実行時間制限 : 1ケース 3.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 43
作問者 : 👑 p-adic / テスター : MasKoaTS
2 ProblemId : 9975 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2023-08-22 12:42:46

注意

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

問題文

入力の最初に 33 個の正整数 N,B,QN, B, Q と、NN 個の 22 次正方行列が与えられます。

NN 以下の各正整数 nn に対し、nn 個目に与えられる 22 次正方行列を AnA_n と置くと、AnA_n は以下の 22 条件を全て満たします:

  1. AnA_n の各成分は整数である。
  2. AnA_n の行列式 det(An)\det(A_n)11 である。

以下で説明される QQ 個のクエリを与えられた順に処理してください。

 

各クエリは 0LRN0 \leq L \leq R \leq N を満たす 44 個の整数 L,R,x,yL, R, x, y の組 (L,R,x,y)(L,R,x,y) です。

クエリ (L,R,x,y)(L,R,x,y) は次のように処理します。

  1. LnRL \leq n \leq R を満たす各整数 nn に対し、整数 zn,wnz_n, w_n を以下のように再帰的に(nn の小さい順に)定める:
    1. n=Ln = L ならば、 (znwn)=(xy)\displaystyle \left( \begin{array}{c} z_n \\ w_n \end{array} \right) = \left( \begin{array}{c} x \\ y \end{array} \right) である。
    2. n>Ln > L ならば、 (znwn)=An(zn1wn1)\displaystyle \left( \begin{array}{c} z_n \\ w_n \end{array} \right) = A_n \left( \begin{array}{c} z_{n-1} \\ w_{n-1} \end{array} \right) である。
  2. zR,wRz_R, w_R をそれぞれ BB で割った余りを求める。(以下これらをそのクエリに対する回答と呼ぶ)

ただし整数 nn に対し、nnBB で割った余りとは 22 条件

  1. 0r<B0 \leq r < B である。
  2. n=qB+rn = qB + r を満たす整数 qq が存在する。

を全て満たす一意な整数 rr を指します。

背景

整数全体の集合 Z\mathbb{Z} や実数全体の集合 R\mathbb{R} は通常の四則演算に関して可換環という代数構造をなします。一般の可換環 RR に対し、行列式が 11 である RR 係数 22 次正方行列全体は特殊線形群 SL2(R)\textrm{SL}_2(R) と呼ばれ、行列の通常の積に関してという代数構造をなすことが知られています。特殊線形群は整数論や表現論を始めとした様々な分野で現れる非常に重要な対象です。

入力

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

QQ 以下の各正整数 qq に対し、qq 個目のクエリを (Lq,Rq,xq,yq)(L_q,R_q,x_q,y_q) と置きます。

 

この時、入力は以下の形式で標準入力から 1+2N+Q1 + 2N + Q 行で与えられます:

  • 11 行目に N,B,QN, B, Q が半角空白区切りで与えられます。
  • NN 以下の各正整数 nn に対し、
    • 2n2n 行目に AnA_n の第 11 行の各成分 An,1,1,An,1,2A_{n,1,1}, A_{n,1,2} が半角空白区切りで与えられます。
    • 2n+12n+1 行目に AnA_n の第 22 行の各成分 An,2,1,An,2,2A_{n,2,1}, A_{n,2,2} が半角空白区切りで与えられます。
  • QQ 以下の各正整数 qq に対し、2N+1+q2N + 1 + q 行目に qq 個目のクエリの各成分 Lq,Rq,xq,yqL_q,R_q,x_q,y_q が半角空白区切りで与えられます。
NN BB QQ
A1,1,1A_{1,1,1} A1,1,2A_{1,1,2}
A1,2,1A_{1,2,1} A1,2,2A_{1,2,2}
\vdots
AN,1,1A_{N,1,1} AN,1,2A_{N,1,2}
AN,2,1A_{N,2,1} AN,2,2A_{N,2,2}
L1L_1 R1R_1 x1x_1 y1y_1
\vdots
LQL_Q RQR_Q xQx_Q yQy_Q

制約

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

  • NN1N1051 \leq N \leq 10^5 を満たす整数である。
  • BB1B1091 \leq B \leq 10^9 を満たす整数である。
  • QQ1Q1051 \leq Q \leq 10^5 を満たす整数である。
  • NN 以下の任意の正整数 nn に対し、
    • 22 以下の任意の正整数 i,ji,j に対し、An,i,jA_{n,i,j}109An,i,j109-10^9 \leq A_{n,i,j} \leq 10^9 を満たす整数である。
    • det(An)=1\det(A_n) = 1 すなわち An,1,1An,2,2An,1,2An,2,1=1A_{n,1,1} A_{n,2,2} - A_{n,1,2} A_{n,2,1} = 1 である。
  • QQ 以下の任意の正整数 qq に対し、
    • Lq,RqL_q,R_q0LqRqN0 \leq L_q \leq R_q \leq N を満たす整数である。
    • xqx_q109xq109-10^9 \leq x_q \leq 10^9 を満たす整数である。
    • yqy_q109yq109-10^9 \leq y_q \leq 10^9 を満たす整数である。

出力

QQ 以下の各正整数 qq に対し、qq 行目に qq 個目のクエリに対する回答(クエリの最後に得た zR,wRz_R, w_R をそれぞれ BB で割った余り)を半角空白区切りで出力してください。

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

サンプル

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

与えられる 22 次正方行列は

A1=(1001)\displaystyle A_1 = \left( \begin{array}{cc} 1 & 0 \\ 0 & 1 \end{array} \right)

11 個だけです。det(A1)=1×10×0=1\det(A_1) = 1 \times 1 - 0 \times 0 = 1 です。

 

与えられるクエリは (L1,R1,x1,y1)=(0,1,1,2)(L_1,R_1,x_1,y_1) = (0,1,1,2) です。L1nR1L_1 \leq n \leq R_1 を満たす整数 nn0,10,1 があり、このクエリに対して定義に従って (zn,wn)(z_n,w_n) を計算すると

(z0w0)=(zL1wL1)=(x1y1)=(12)(z1w1)=A1(z0w0)=(1001)(12)=(12)\displaystyle \begin{array}{ccccccc} \displaystyle \left( \begin{array}{cc} z_0 \\ w_0 \end{array} \right) &\displaystyle = &\displaystyle \left( \begin{array}{cc} z_{L_1} \\ w_{L_1} \end{array} \right) &\displaystyle = &\displaystyle \left( \begin{array}{cc} x_1 \\ y_1 \end{array} \right) &\displaystyle = &\displaystyle \left( \begin{array}{cc} 1 \\ 2 \end{array} \right) \\ \displaystyle \left( \begin{array}{cc} z_1 \\ w_1 \end{array} \right) &\displaystyle = &\displaystyle A_1 \left( \begin{array}{cc} z_0 \\ w_0 \end{array} \right) &\displaystyle = &\displaystyle \left( \begin{array}{cc} 1 & 0 \\ 0 & 1 \end{array} \right) \left( \begin{array}{cc} 1 \\ 2 \end{array} \right) &\displaystyle = &\displaystyle \left( \begin{array}{cc} 1 \\ 2 \end{array} \right) \end{array}

となります。従って (zR1,wR1)=(z1,w1)=(1,2)(z_{R_1},w_{R_1}) = (z_1,w_1) = (1,2) であるので、1,21,2 をそれぞれ B=1B = 1 で割った余り 0,00,0 を半角空白区切りで出力してください。

今回は Q=1Q = 1 であるので、これにて全てのクエリが処理できました。

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

与えられる 22 次正方行列は

A1=(1211)\displaystyle A_1 = \left( \begin{array}{cc} 1 & -2 \\ 1 & -1 \end{array} \right)

11 個だけです。det(A1)=1×(1)(2)×1=1\det(A_1) = 1 \times (-1) - (-2) \times 1 = 1 です。

 

11 個目のクエリは (L1,R1,x1,y1)=(0,0,1,0)(L_1,R_1,x_1,y_1) = (0,0,1,0) です。L1nR1L_1 \leq n \leq R_1 を満たす整数 nn00 に限られ、このクエリに対して定義に従って (zn,wn)(z_n,w_n) を計算すると

(z0w0)=(zL1wL1)=(x1y1)=(10)\displaystyle \left( \begin{array}{cc} z_0 \\ w_0 \end{array} \right) = \left( \begin{array}{cc} z_{L_1} \\ w_{L_1} \end{array} \right) = \left( \begin{array}{cc} x_1 \\ y_1 \end{array} \right) = \left( \begin{array}{cc} 1 \\ 0 \end{array} \right)

となります。従って (zR1,wR1)=(z0,w0)=(1,0)(z_{R_1},w_{R_1}) = (z_0,w_0) = (1,0) であるので、1,01,0 をそれぞれ B=2B = 2 で割った余り 1,01,0 を半角空白区切りで出力してください。

 

22 個目のクエリは (L2,R2,x2,y2)=(1,1,0,1)(L_2,R_2,x_2,y_2) = (1,1,0,1) です。L2nR2L_2 \leq n \leq R_2 を満たす整数 nn11 に限られ、このクエリに対して定義に従って (zn,wn)(z_n,w_n) を計算すると

(z1w1)=(zL2wL2)=(x2y2)=(01)\displaystyle \left( \begin{array}{cc} z_1 \\ w_1 \end{array} \right) = \left( \begin{array}{cc} z_{L_2} \\ w_{L_2} \end{array} \right) = \left( \begin{array}{cc} x_2 \\ y_2 \end{array} \right) = \left( \begin{array}{cc} 0 \\ 1 \end{array} \right)

となります。従って (zR2,wR2)=(z1,w1)=(0,1)(z_{R_2},w_{R_2}) = (z_1,w_1) = (0,1) であるので、0,10,1 をそれぞれ B=2B = 2 で割った余り 0,10,1 を半角空白区切りで出力してください。

今回は Q=2Q = 2 であるので、これにて全てのクエリが処理できました。

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

与えられる 22 次正方行列は

A1=(2111)A2=(1112)\displaystyle \begin{array}{rcl} \displaystyle A_1 &\displaystyle = &\displaystyle \left( \begin{array}{cc} 2 & 1 \\ 1 & 1 \end{array} \right) \\ \displaystyle A_2 &\displaystyle = &\displaystyle \left( \begin{array}{cc} -1 & -1 \\ -1 & -2 \end{array} \right) \end{array}

22 個です。det(A1)=2×11×1=1\det(A_1) = 2 \times 1 - 1 \times 1 = 1 かつ det(A2)=(1)×(2)(1)×(1)=1\det(A_2) = (-1) \times (-2) - (-1) \times (-1) = 1 です。

 

11 個目のクエリは (L1,R1,x1,y1)=(0,1,0,1)(L_1,R_1,x_1,y_1) = (0,1,0,1) です。L1nR1L_1 \leq n \leq R_1 を満たす整数 nn0,10,1 があり、このクエリに対して定義に従って (zn,wn)(z_n,w_n) を計算すると

(z0w0)=(zL1wL1)=(x1y1)=(01)(z1w1)=A1(z0w0)=(2111)(01)=(11)\displaystyle \begin{array}{ccccccc} \displaystyle \left( \begin{array}{cc} z_0 \\ w_0 \end{array} \right) &\displaystyle = &\displaystyle \left( \begin{array}{cc} z_{L_1} \\ w_{L_1} \end{array} \right) &\displaystyle = &\displaystyle \left( \begin{array}{cc} x_1 \\ y_1 \end{array} \right) &\displaystyle = &\displaystyle \left( \begin{array}{cc} 0 \\ 1 \end{array} \right) \\ \displaystyle \left( \begin{array}{cc} z_1 \\ w_1 \end{array} \right) &\displaystyle = &\displaystyle A_1 \left( \begin{array}{cc} z_0 \\ w_0 \end{array} \right) &\displaystyle = &\displaystyle \left( \begin{array}{cc} 2 & 1 \\ 1 & 1 \end{array} \right) \left( \begin{array}{cc} 0 \\ 1 \end{array} \right) &\displaystyle = &\displaystyle \left( \begin{array}{cc} 1 \\ 1 \end{array} \right) \end{array}

となります。従って (zR1,wR1)=(z1,w1)=(1,1)(z_{R_1},w_{R_1}) = (z_1,w_1) = (1,1) であるので、1,11,1 をそれぞれ B=3B = 3 で割った余り 1,11,1 を半角空白区切りで出力してください。

 

22 個目のクエリは (L2,R2,x2,y2)=(0,2,0,1)(L_2,R_2,x_2,y_2) = (0,2,0,1) です。L2nR2L_2 \leq n \leq R_2 を満たす整数 nn0,1,20,1,2 があり、このクエリに対して定義に従って (zn,wn)(z_n,w_n) を計算すると (L2,x2,y2)=(L1,x1,y1)(L_2,x_2,y_2) = (L_1,x_1,y_1) より (z0,w0),(z1,w1)(z_0,w_0), (z_1,w_1) の値は 11 個目のクエリに対する値と同じであり、

(z2w2)=A2(z1w1)=(1112)(11)=(23)\displaystyle \left( \begin{array}{cc} z_2 \\ w_2 \end{array} \right) = A_2 \left( \begin{array}{cc} z_1 \\ w_1 \end{array} \right) = \left( \begin{array}{cc} -1 & -1 \\ -1 & -2 \end{array} \right) \left( \begin{array}{cc} 1 \\ 1 \end{array} \right) = \left( \begin{array}{cc} -2 \\ -3 \end{array} \right)

となります。従って (zR2,wR2)=(z2,w2)=(2,3)(z_{R_2},w_{R_2}) = (z_2,w_2) = (-2,-3) であるので、2,3-2,-3 をそれぞれ B=3B = 3 で割った余り 1,01,0 を半角空白区切りで出力してください。

今回は Q=2Q = 2 であるので、これにて全てのクエリが処理できました。

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