問題一覧 > ネタ問題

No.8112 区間和係数多項式?

レベル : / 実行時間制限 : 1ケース 6.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 5
作問者 : 👑 p-adic / テスター : Shirotsume
0 ProblemId : 10632 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2024-04-01 20:16:29

注意

この問題はApril Fool Contest 2024向けに作られたネタ問題です。

問題自体に嘘はありませんが、正攻法の考察で解くことは難しいかもしれません。

なおこの問題の実行時間制限は6000[ms]です。高速な言語・処理系の利用を推奨します。

参考までにwriter解はc++で2207[ms]、PyPy3で2691[ms]、Python3でTLEとなります。

問題文

入力に 33 個の正整数 N,B,QN, B, Q1010 個の非負整数 C1,D1,C2,D2,C3,D3,C4,D4,C5,D5C_1, D_1, C_2, D_2, C_3, D_3, C_4, D_4, C_5, D_5 が与えられます。

最初に長さ NN の非負整数列 AA が初項 C1C_1 公比 D1D_1 の等比数列として与えられています。

 

まずは記法の導入です。NN 未満の各非負整数 ii に対し、AiA_iAA1+i1+i 個目の成分を表します。

各正整数 ii に対し、ii22 進加法付値(22で割り切れる回数)を ν2(i)\nu_2(i) と置き、p(i)=i2ν2(i)p(i) = i - 2^{\nu_2(i)} と定めます。

NN 未満の各非負整数 jj と非負整数 yy に対し、AA を用いて非負整数 f(j,y)f(j,y) を以下のように再帰的に定めます:

f(j,y)={A0(j=0)yf(p(j),y)+i=p(j)+1jAi(j0)\displaystyle f(j,y) = \left\{ \begin{array}{ll} A_0 & (j = 0) \\ y f(p(j),y) + \sum_{i=p(j)+1}^{j} A_i & (j \neq 0) \end{array} \right.

再帰的定義に慣れていない人向けの説明はこちらです。(クリックで開く)

 

いかなる正整数 ii に対しても p(i)<ip(i) < i が成り立つので、jjpp を反復して適用することでいずれ 00 に到達します。その回数を dd と置くと、

f(j,y)=ydA0+n=0d1(pn+1(j)+1pn(j)Ai)yn f(j,y) = y^d A_0 + \sum_{n=0}^{d-1} \left( \sum_{p^{n+1}(j)+1}^{p^n(j)} A_i \right) y^n

と表せます。右辺は AA の区間和を係数に持つ yy の多項式です。

 

以下で説明する QQ 個のクエリを処理してください。

 

各クエリは、22 個の NN 未満の非負整数 i,ji,j22 個の非負整数 x,yx,y の組 (i,j,x,y)(i,j,x,y) です。

クエリ (i,j,x,y)(i,j,x,y) は以下のように処理します:

  1. まず AA1+i1 + i 個目の成分 AiA_ixx で置き換えることで AA を更新する。
  2. 次に更新後の AA に対する f(j,y)f(j,y)BB で割った余りを求める。(以下、この値をこのクエリに対する回答と呼ぶ)

ただしクエリは入力から与えられません。QQ 以下の各正整数 qq に対し、qq 個目のクエリ (i,j,x,y)(i,j,x,y)

(i,j,x,y)=((C2D2q1)modN,(C3D3q1)modN,C4D4q1,C5D5q1)\displaystyle (i,j,x,y) = ((C_2 D_2^{q-1}) \bmod N, (C_3 D_3^{q-1}) \bmod N, C_4 D_4^{q-1}, C_5 D_5^{q-1})

として定めます。ここで非負整数 nn に対する nmodNn \bmod NnnNN で割った余りを表し、000^011 と定義します。

入力

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

  • 11 行目に N,B,QN, B, Q が半角空白区切りで与えられます。
  • 22 行目に C1,D1C_1, D_1 が半角空白区切りで与えられます。
  • 33 行目に C2,D2C_2, D_2 が半角空白区切りで与えられます。
  • 44 行目に C3,D3C_3, D_3 が半角空白区切りで与えられます。
  • 55 行目に C4,D4C_4, D_4 が半角空白区切りで与えられます。
  • 66 行目に C5,D5C_5, D_5 が半角空白区切りで与えられます。
NN BB QQ
C1C_1 D1D_1
C2C_2 D2D_2
C3C_3 D3D_3
C4C_4 D4D_4
C5C_5 D5D_5

制約

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

  • NN1N1071 \leq N \leq \textcolor{brown}{10^7} を満たす整数である。
  • BB1B1091 \leq B \leq \textcolor{red}{10^9} を満たす整数である。
  • QQ1Q1061 \leq Q \leq \textcolor{blue}{10^6} を満たす整数である。
  • C1C_10C11090 \leq C_1 \leq \textcolor{red}{10^9} を満たす整数である。
  • D1D_10D11090 \leq D_1 \leq \textcolor{red}{10^9} を満たす整数である。
  • C2C_20C21070 \leq C_2 \leq \textcolor{brown}{10^7} を満たす整数である。
  • D2D_20D21070 \leq D_2 \leq \textcolor{brown}{10^7} を満たす整数である。
  • C3C_30C31070 \leq C_3 \leq \textcolor{brown}{10^7} を満たす整数である。
  • D3D_30D31070 \leq D_3 \leq \textcolor{brown}{10^7} を満たす整数である。
  • C4C_40C41090 \leq C_4 \leq \textcolor{red}{10^9} を満たす整数である。
  • D4D_40D41090 \leq D_4 \leq \textcolor{red}{10^9} を満たす整数である。
  • C5C_50C51090 \leq C_5 \leq \textcolor{red}{10^9} を満たす整数である。
  • D5D_50D51090 \leq D_5 \leq \textcolor{red}{10^9} を満たす整数である。

出力

QQ 以下の各正整数 qq に対し、qq 行目に qq 個目のクエリに対する回答を出力してください。

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

サンプル

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

N=1N = 1 であり、最初は A=(010)=(0)A = (0 \cdot 1^0) = (0) として与えられています。

11 回目のクエリ (i1,j1,x1,y1)=((000)modN,(010)modN,110,100)=(0,0,1,1)(i_1,j_1,x_1,y_1) = ((0 \cdot 0^0) \bmod N,(0 \cdot 1^0) \bmod N,1 \cdot 1^0,1 \cdot 0^0) = (0,0,1,1) により AA

(x1)=(1)\displaystyle (x_1) = (1)

に置き換わり、

f(j1,y1)=f(0,1)=A0=1\displaystyle f(j_1,y_1) = f(0,1) = A_0 = 1

B=1B = 1 で割った余り 00 を出力します。

Q=1Q = 1 なので、これで全てのクエリが処理できました。

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

N=2N = 2 であり、最初は A=(110,111)=(1,1)A = (1 \cdot 1^0,1 \cdot 1^1) = (1,1) として与えられています。

11 回目のクエリ (i1,j1,x1,y1)=((100)modN,(010)modN,100,100)=(1,0,1,1)(i_1,j_1,x_1,y_1) = ((1 \cdot 0^0) \bmod N,(0 \cdot 1^0) \bmod N,1 \cdot 0^0,1 \cdot 0^0) = (1,0,1,1) により AA

(A0,x1)=(1,1)\displaystyle (A_0,x_1) = (1,1)

に置き換わり(結果的に変化せず)、

f(j1,y1)=f(0,1)=A0=1\displaystyle f(j_1,y_1) = f(0,1) = A_0 = 1

B=2B = 2 で割った余り 11 を出力します。

 

22 回目のクエリ (i2,j2,x2,y2)=((101)modN,(011)modN,101,101)=(0,0,0,0)(i_2,j_2,x_2,y_2) = ((1 \cdot 0^1) \bmod N,(0 \cdot 1^1) \bmod N,1 \cdot 0^1,1 \cdot 0^1) = (0,0,0,0) により AA

(x2,A1)=(0,1)\displaystyle (x_2,A_1) = (0,1)

に置き換わり、

f(j2,y2)=f(0,0)=A0=0\displaystyle f(j_2,y_2) = f(0,0) = A_0 = 0

B=2B = 2 で割った余り 00 を出力します。

Q=2Q = 2 なので、これで全てのクエリが処理できました。

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

N=4N = 4 であり、最初は A=(120,121,122,123)=(1,2,4,8)A = (1 \cdot 2^0,1 \cdot 2^1,1 \cdot 2^2,1 \cdot 2^3) = (1,2,4,8) として与えられています。

11 回目のクエリ (i1,j1,x1,y1)=((220)modN,(310)modN,210,210)=(2,3,2,2)(i_1,j_1,x_1,y_1) = ((2 \cdot 2^0) \bmod N,(3 \cdot 1^0) \bmod N,2 \cdot 1^0,2 \cdot 1^0) = (2,3,2,2) により AA

(A0,A1,x1,A3)=(1,2,2,8)\displaystyle (A_0,A_1,x_1,A_3) = (1,2,2,8)

に置き換わり、

f(j1,y1)=f(3,2)=2f(2,2)+i=2+13Ai=22f(0,2)+2i=0+12Ai+i=2+13Ai=22A0+2i=0+12Ai+i=2+13Ai=221+2(2+2)+8=4+8+8=20\displaystyle \begin{array}{rcl} \displaystyle f(j_1,y_1) &\displaystyle = &\displaystyle f(3,2) \\ \displaystyle &\displaystyle = &\displaystyle 2 f(2,2) + \sum_{i=2+1}^{3} A_i \\ \displaystyle &\displaystyle = &\displaystyle 2^2 f(0,2) + 2 \sum_{i=0+1}^{2} A_i + \sum_{i=2+1}^{3} A_i \\ \displaystyle &\displaystyle = &\displaystyle 2^2 A_0 + 2 \sum_{i=0+1}^{2} A_i + \sum_{i=2+1}^{3} A_i \\ \displaystyle &\displaystyle = &\displaystyle 2^2 \cdot 1 + 2 \cdot (2 + 2) + 8 \\ \displaystyle &\displaystyle = &\displaystyle 4 + 8 + 8 \\ \displaystyle &\displaystyle = &\displaystyle 20 \end{array}

B=3B = 3 で割った余り 22 を出力します。

 

22 回目のクエリ (i2,j2,x2,y2)=((221)modN,(311)modN,211,211)=(0,3,2,2)(i_2,j_2,x_2,y_2) = ((2 \cdot 2^1) \bmod N,(3 \cdot 1^1) \bmod N,2 \cdot 1^1,2 \cdot 1^1) = (0,3,2,2) により AA

(x2,A1,A2,A3)=(2,2,2,8)\displaystyle (x_2,A_1,A_2,A_3) = (2,2,2,8)

に置き換わり、

f(j1,y1)=f(3,2)=22A0+2i=0+12Ai+i=2+13Ai=222+2(2+2)+8=8+8+8=24\displaystyle \begin{array}{rcl} \displaystyle f(j_1,y_1) &\displaystyle = &\displaystyle f(3,2) \\ \displaystyle &\displaystyle = &\displaystyle 2^2 A_0 + 2 \sum_{i=0+1}^{2} A_i + \sum_{i=2+1}^{3} A_i \\ \displaystyle &\displaystyle = &\displaystyle 2^2 \cdot 2 + 2 \cdot (2 + 2) + 8 \\ \displaystyle &\displaystyle = &\displaystyle 8 + 8 + 8 \\ \displaystyle &\displaystyle = &\displaystyle 24 \end{array}

B=3B = 3 で割った余り 00 を出力します。

Q=2Q = 2 なので、これで全てのクエリが処理できました。

サンプル4
入力
8 4 2
1 1
3 2
7 1
2 3
3 2
出力
3
3

N=8N = 8 であり、最初は A=(110,111,112,113,114,115,116,117)=(1,1,1,1,1,1,1,1)A = (1 \cdot 1^0,1 \cdot 1^1,1 \cdot 1^2,1 \cdot 1^3,1 \cdot 1^4,1 \cdot 1^5,1 \cdot 1^6,1 \cdot 1^7) = (1,1,1,1,1,1,1,1) として与えられています。

11 回目のクエリ (i1,j1,x1,y1)=((320)modN,(710)modN,230,320)=(3,7,2,3)(i_1,j_1,x_1,y_1) = ((3 \cdot 2^0) \bmod N,(7 \cdot 1^0) \bmod N,2 \cdot 3^0,3 \cdot 2^0) = (3,7,2,3) により AA

(A0,A1,A2,x1,A4,A5,A6,A7)=(1,1,1,2,1,1,1,1)\displaystyle (A_0,A_1,A_2,x_1,A_4,A_5,A_6,A_7) = (1,1,1,2,1,1,1,1)

に置き換わり、

f(j1,y1)=f(7,3)=3f(6,3)+i=6+17Ai=32f(4,3)+3i=4+16Ai+i=6+17Ai=33f(0,3)+32i=0+14Ai+3i=4+16Ai+i=6+17Ai=33A0+32i=0+14Ai+3i=4+16Ai+i=6+17Ai=331+32(1+1+2+1)+3(1+1)+1=27+45+6+1=79\displaystyle \begin{array}{rcl} \displaystyle f(j_1,y_1) &\displaystyle = &\displaystyle f(7,3) \\ \displaystyle &\displaystyle = &\displaystyle 3 f(6,3) + \sum_{i=6+1}^{7} A_i \\ \displaystyle &\displaystyle = &\displaystyle 3^2 f(4,3) + 3 \sum_{i=4+1}^{6} A_i + \sum_{i=6+1}^{7} A_i \\ \displaystyle &\displaystyle = &\displaystyle 3^3 f(0,3) + 3^2 \sum_{i=0+1}^{4} A_i + 3 \sum_{i=4+1}^{6} A_i + \sum_{i=6+1}^{7} A_i \\ \displaystyle &\displaystyle = &\displaystyle 3^3 A_0 + 3^2 \sum_{i=0+1}^{4} A_i + 3 \sum_{i=4+1}^{6} A_i + \sum_{i=6+1}^{7} A_i \\ \displaystyle &\displaystyle = &\displaystyle 3^3 \cdot 1 + 3^2 \cdot (1 + 1 + 2 + 1) + 3 \cdot (1 + 1) + 1 \\ \displaystyle &\displaystyle = &\displaystyle 27 + 45 + 6 + 1 \\ \displaystyle &\displaystyle = &\displaystyle 79 \end{array}

B=4B = 4 で割った余り 33 を出力します。

 

22 回目のクエリ (i2,j2,x2,y2)=((321)modN,(711)modN,231,321)=(6,7,6,6)(i_2,j_2,x_2,y_2) = ((3 \cdot 2^1) \bmod N,(7 \cdot 1^1) \bmod N,2 \cdot 3^1,3 \cdot 2^1) = (6,7,6,6) により AA

(A0,A1,A2,A3,A4,A5,x2,A7)=(1,1,1,2,1,1,6,1)\displaystyle (A_0,A_1,A_2,A_3,A_4,A_5,x_2,A_7) = (1,1,1,2,1,1,6,1)

に置き換わり、

f(j1,y1)=f(7,6)=6f(6,6)+i=6+17Ai=62f(4,6)+6i=4+16Ai+i=6+17Ai=63f(0,6)+62i=0+14Ai+6i=4+16Ai+i=6+17Ai=63A0+62i=0+14Ai+6i=4+16Ai+i=6+17Ai=631+62(1+1+2+1)+6(6+1)+1=216+180+42+1=439\displaystyle \begin{array}{rcl} \displaystyle f(j_1,y_1) &\displaystyle = &\displaystyle f(7,6) \\ \displaystyle &\displaystyle = &\displaystyle 6 f(6,6) + \sum_{i=6+1}^{7} A_i \\ \displaystyle &\displaystyle = &\displaystyle 6^2 f(4,6) + 6 \sum_{i=4+1}^{6} A_i + \sum_{i=6+1}^{7} A_i \\ \displaystyle &\displaystyle = &\displaystyle 6^3 f(0,6) + 6^2 \sum_{i=0+1}^{4} A_i + 6 \sum_{i=4+1}^{6} A_i + \sum_{i=6+1}^{7} A_i \\ \displaystyle &\displaystyle = &\displaystyle 6^3 A_0 + 6^2 \sum_{i=0+1}^{4} A_i + 6 \sum_{i=4+1}^{6} A_i + \sum_{i=6+1}^{7} A_i \\ \displaystyle &\displaystyle = &\displaystyle 6^3 \cdot 1 + 6^2 \cdot (1 + 1 + 2 + 1) + 6 \cdot (6 + 1) + 1 \\ \displaystyle &\displaystyle = &\displaystyle 216 + 180 + 42 + 1 \\ \displaystyle &\displaystyle = &\displaystyle 439 \end{array}

B=4B = 4 で割った余り 33 を出力します。

Q=2Q = 2 なので、これで全てのクエリが処理できました。

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