問題一覧 > 教育的問題

No.2537 多重含意

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 47
作問者 : 👑 p-adic / テスター : 遭難者 hiro1729
2 ProblemId : 9509 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2023-09-27 15:57:40

問題文

入力に 22 個の正整数 N,BN, B と、NN 以下の正整数のみを成分に持つ長さ NN の数列 AA が与えられます。

NN 以下の各正整数 jj に対し、AjA_jAAjj 個目の成分を表します。

ここでは命題変数と言ったら PP に正整数の添字をつけた文字列を表します。例えば P1P_1 は命題変数ですが、PPQ2Q_2 は命題変数ではありません。

1rN1 \leq \ell \leq r \leq N を満たす各整数 ,r\ell, r に対し、命題 XA(,r)X_A(\ell,r) を次の再帰式で定めます:

XA(,r)={PA(=r)PAXA(+1,r)(<r)\displaystyle X_A(\ell,r) = \left\{ \begin{array}{ll} \displaystyle P_{A_{\ell}} &\displaystyle (\ell = r) \\ \displaystyle P_{A_{\ell}} \Rightarrow X_A(\ell+1,r) &\displaystyle (\ell < r) \end{array} \right.

ただし \Rightarrow は含意(ならば)を表す論理演算子です。上の再帰式は要するに \Rightarrow を右から結合していくことで新たな命題を構成しています。

例えば N4N \geq 4 の時、XA(3,4)X_A(3,4) は命題 PA3PA4P_{A_3} \Rightarrow P_{A_4} であり、XA(2,4)X_A(2,4)PA2XA(3,4)P_{A_2} \Rightarrow X_A(3,4) すなわち PA2(PA3PA4)P_{A_2} \Rightarrow (P_{A_3} \Rightarrow P_{A_4}) となります。

 

NN 以下の各正整数 rr に対し、次の問題に答えてください:

  • NN 以下の各正整数 ii に対する PiP_i の真理値割り当てであって XA(1,r)X_A(1,r) が真となるようなものの総数を BB で割った余りを求めてください。
命題変数の真理値割り当てについて知らない人向けの説明はこちらです。(クリックで開く)

 

NN 以下の各正整数 ii に対する PiP_i の真理値割り当てとは、大雑把には各正整数 ii に対し PiP_i が真であるか偽であるかを決める対応のことです。

より形式的には NN 以下の正整数全体の集合から {0,1}\{0,1\} への写像のことですが、その定式化に納得できる人はこの補足が不要なので大雑把な説明に留めます。

入力

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

  • 11 行目に N,BN, B が半角空白区切りで与えられます。
  • 22 行目に AA の各成分が半角空白区切りで与えられます。
NN BB
A1A_1 \cdots ANA_N

制約

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

  • NN1N1051 \leq N \leq 10^5 を満たす整数である。
  • BB1B1091 \leq B \leq 10^9 を満たす整数である。
  • NN 以下の各正整数 jj に対し、AjA_j1AjN1 \leq A_j \leq N を満たす整数である。

出力

NN 以下の各正整数 rr に対し、NN 以下の各正整数 ii に対する PiP_i の真理値割り当てであって XA(1,r)X_A(1,r) が真となるようなものの総数を BB で割った余りを rr 行目に出力してください。

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

サンプル

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

AA は長さ N=1N = 1 の正整数列 (1)(1) です。

XA(1,1)X_A(1,1)PA1P_{A_1} すなわち P1P_1 です。N=1N = 1 以下の各正整数 ii に対する PiP_i の真理値割り当ては P1P_1 に真偽のどちらを割り当てるかの 22 通りがあり、

  • P1P_1 に真を割り当てると、XA(1,1)X_A(1,1) は真となります。
  • P1P_1 に偽を割り当てると、XA(1,1)X_A(1,1) は偽となります。

以上より、XA(1,1)X_A(1,1) が真となる真理値割り当ての総数は 11 となります。11B=1B = 1 で割った余りは 00 です。

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

AA は長さ N=2N = 2 の正整数列 (2,1)(2,1) です。

まず XA(1,1)X_A(1,1)PA1P_{A_1} すなわち P2P_2 です。N=2N = 2 以下の各正整数 ii に対する PiP_i の真理値割り当ては P1,P2P_1, P_2 のそれぞれに真偽のどちらを割り当てるかの 44 通りがあり、

  • P1P_1 に真を割り当て P2P_2 に真を割り当てると、XA(1,1)X_A(1,1) は真となります。
  • P1P_1 に偽を割り当て P2P_2 に真を割り当てると、XA(1,1)X_A(1,1) は真となります。
  • P1P_1 に真を割り当て P2P_2 に偽を割り当てると、XA(1,1)X_A(1,1) は偽となります。
  • P1P_1 に偽を割り当て P2P_2 に偽を割り当てると、XA(1,1)X_A(1,1) は偽となります。

以上より、XA(1,1)X_A(1,1) が真となる真理値割り当ての総数は 22 となります。22B=2B = 2 で割った余りは 00 です。

 

次に XA(1,2)X_A(1,2)PA1PA2P_{A_1} \Rightarrow P_{A_2} すなわち P2P1P_2 \Rightarrow P_1 です。N=2N = 2 以下の各正整数 ii に対する PiP_i の真理値割り当ては P1,P2P_1, P_2 のそれぞれに真偽のどちらを割り当てるかの 44 通りがあり、

  • P1P_1 に真を割り当て P2P_2 に真を割り当てると、XA(1,2)X_A(1,2) は真となります。
  • P1P_1 に偽を割り当て P2P_2 に真を割り当てると、XA(1,2)X_A(1,2) は偽となります。
  • P1P_1 に真を割り当て P2P_2 に偽を割り当てると、XA(1,2)X_A(1,2) は真となります。
  • P1P_1 に偽を割り当て P2P_2 に偽を割り当てると、XA(1,2)X_A(1,2) は真となります。

以上より、XA(1,2)X_A(1,2) が真となる真理値割り当ての総数は 33 となります。33B=2B = 2 で割った余りは 11 です。

サンプル3
入力
2 3
1 1

このように A1=A2A_1 = A_2 となることもあります。

出力
2
1

AA は長さ N=2N = 2 の正整数列 (1,1)(1,1) です。

まず XA(1,1)X_A(1,1)PA1P_{A_1} すなわち P1P_1 です。N=2N = 2 以下の各正整数 ii に対する PiP_i の真理値割り当ては P1,P2P_1, P_2 のそれぞれに真偽のどちらを割り当てるかの 44 通りがあり、

  • P1P_1 に真を割り当て P2P_2 に真を割り当てると、XA(1,1)X_A(1,1) は真となります。
  • P1P_1 に偽を割り当て P2P_2 に真を割り当てると、XA(1,1)X_A(1,1) は偽となります。
  • P1P_1 に真を割り当て P2P_2 に偽を割り当てると、XA(1,1)X_A(1,1) は真となります。
  • P1P_1 に偽を割り当て P2P_2 に偽を割り当てると、XA(1,1)X_A(1,1) は偽となります。

以上より、XA(1,1)X_A(1,1) が真となる真理値割り当ての総数は 22 となります。22B=3B = 3 で割った余りは 22 です。

 

次に XA(1,2)X_A(1,2)PA1PA2P_{A_1} \Rightarrow P_{A_2} すなわち P1P1P_1 \Rightarrow P_1 です。N=2N = 2 以下の各正整数 ii に対する PiP_i の真理値割り当ては P1,P2P_1, P_2 のそれぞれに真偽のどちらを割り当てるかの 44 通りがあり、

  • P1P_1 に真を割り当て P2P_2 に真を割り当てると、XA(1,2)X_A(1,2) は真となります。
  • P1P_1 に偽を割り当て P2P_2 に真を割り当てると、XA(1,2)X_A(1,2) は真となります。
  • P1P_1 に真を割り当て P2P_2 に偽を割り当てると、XA(1,2)X_A(1,2) は真となります。
  • P1P_1 に偽を割り当て P2P_2 に偽を割り当てると、XA(1,2)X_A(1,2) は真となります。

以上より、XA(1,2)X_A(1,2) が真となる真理値割り当ての総数は 44 となります。44B=3B = 3 で割った余りは 11 です。

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