atcoder#AGC017F. [AGC017F] Zigzag

[AGC017F] Zigzag

题目描述

下図のように,1 1 辺が N N 個の点からなる正三角形状に,N(N+1)/2 N(N+1)/2 個の点が並んでいます. 上から i i 段目の左から j j 番目の点を (i, j) (i,\ j) で表すことにします(1  i  N 1\ \leq\ i\ \leq\ N , 1  j  i 1\ \leq\ j\ \leq\ i ). また,(i+1, j) (i+1,\ j) (i, j) (i,\ j) のすぐ左下の点,(i+1, j+1) (i+1,\ j+1) (i, j) (i,\ j) のすぐ右下の点と呼ぶことにします.

高橋君は,この点を結んで,M M 個の折れ線 1, 2, ..., M 1,\ 2,\ ...,\ M を描くことにしました. 各折れ線は,(1, 1) (1,\ 1) から始めて,「現在いる点のすぐ左下の点かすぐ右下の点を選び,現在いる点と選んだ点を直線で結んだのち,選んだ点へ移動する」 ことを N1 N-1 回繰り返すことで得られます. すなわち,ある Xi,1, ..., Xi,N X_{i,1},\ ...,\ X_{i,N} が存在して,次が成り立ちます:

  • 折れ線 i i は,N N 個の点 $ (1,\ X_{i,1}),\ (2,\ X_{i,2}),\ ...,\ (N,\ X_{i,N}) $ をこの順で結んでいる.
  • j=1, 2, ..., N1 j=1,\ 2,\ ...,\ N-1 に対して,Xi,j+1 = Xi,j X_{i,j+1}\ =\ X_{i,j} または Xi,j+1 = Xi,j+1 X_{i,j+1}\ =\ X_{i,j}+1 が成り立つ.

高橋君は,折れ線 i+1 i+1 が折れ線 i i の左に来ることはないように折れ線を描きたいです. つまり,j=1, 2, ..., N j=1,\ 2,\ ...,\ N に対して,X1,j  X2,j  ...  XM,j X_{1,j}\ \leq\ X_{2,j}\ \leq\ ...\ \leq\ X_{M,j} が成り立ちます.

また,高橋君は,折れ線の曲がり方について K K 個の条件を満たすように折れ線を描かなければなりません. i i 番目の条件は (Ai, Bi, Ci) (A_i,\ B_i,\ C_i) で表され,これは次を意味します:

  • Ci=0 C_i=0 のときは,折れ線 Ai A_i を描くとき,Bi B_i 回目の移動においては,その時いる点のすぐ左下の点を選ぶ.
  • Ci=1 C_i=1 のときは,折れ線 Ai A_i を描くとき,Bi B_i 回目の移動においては,その時いる点のすぐ右下の点を選ぶ.

すなわち,XAi, Bi+1 = XAi, Bi + Ci X_{A_i,\ {B_i}+1}\ =\ X_{A_i,\ B_i}\ +\ C_i を意味します.

高橋君が M M 個の折れ線を描く方法が何通りあるかを mod 1000000007 1000000007 で求めてください.

输入格式

入力は以下の形式で標準入力から与えられる。

N N M M K K A1 A_1 B1 B_1 C1 C_1 A2 A_2 B2 B_2 C2 C_2 : AK A_K BK B_K CK C_K

输出格式

高橋君が M M 個の折れ線を描く方法は何通りあるかを mod 1000000007 1000000007 で出力せよ.

题目大意

  • 给定一个 NN 层的三角形图,第 ii 层有 ii 个节点。
  • ii 层的节点,从左到右依次标号为 (i,1),(i,2),,(i,i)(i, 1), (i, 2), \ldots , (i, i)(具体如上图所示)。
  • 你需要从 (1,1)(1, 1) 往下画 MM 条折线。
  • 对于每条折线的每一个小段,你可以从 (i,j)(i, j) 画到 (i+1,j)(i + 1, j) 或者 (i+1,j+1)(i + 1, j + 1)
  • 同时你还必须保证第 ii 条折线的任何一个位置必须不能处在第 i1i - 1 条折线的左侧,它们必须按照从左到右的顺序排列。
  • KK 条限制,每条限制形如 (Ai,Bi,Ci)(A_i, B_i, C_i)
  • 表示第 AiA_i 条折线处于位置 (Bi,j)(B_i, j) 时,下一小段必须走向 (Bi+1,j+Ci)(B_i + 1, j + C_i),也就是当 Ci=0C_i = 0 时向左,当 Ci=1C_i = 1 时向右。
  • 询问不同的折线画法的方案数,对 109+7{10}^9 + 7 取模。
  • 1N,M201 \le N, M \le 200KM(N1)0 \le K \le M (N - 1)。其它变量在合理范围内。
3 2 1
1 2 0
6
3 2 2
1 1 1
2 1 0
0
5 4 2
1 3 1
4 2 0
172
20 20 0
881396682

提示

注意

提出を行う前に,「コードテスト」を利用して実行時間を計測することを強く推奨する.

制約

  • 1  N  20 1\ \leq\ N\ \leq\ 20
  • 1  M  20 1\ \leq\ M\ \leq\ 20
  • 0  K  (N1)M 0\ \leq\ K\ \leq\ (N-1)M
  • 1  Ai  M 1\ \leq\ A_i\ \leq\ M
  • 1  Bi  N1 1\ \leq\ B_i\ \leq\ N-1
  • Ci = 0,1 C_i\ =\ 0,1
  • (Ai, Bi) (A_i,\ B_i) として同じ組は複数回与えられない.

Sample Explanation 1

下図に示すように,6 6 通りの描き方があります.ただし,赤線は折れ線 1 1 ,緑線は折れ線 2 2 を表します: ![](https://atcoder.jp/img/agc017/75921b6e5a59ab17b4c07ada848b9f14.png)