東京農工大学MCCプログラミングコンテスト2023
コンテスト日時
2023/09/26 (Tu) 20:00 - 22:00

B - Cheating Mahjong

ผักชี
2
s
1024
MB
200

問題文

AliceとBobはとある対戦ゲームをします。このゲームのルールは以下の通りです。

  • ゲームは $1$ から $N$ までの各整数が書かれた $3N$ 枚のカードを用いて行う。各整数のカードは $3$ 枚ずつ存在する。この同じ数字が書かれた $3$ 枚のカード $1$ 組を「セット」と呼ぶ。また、同じ数字が書かれた $3$ 枚のカードは互いに区別できないものとする。
  • はじめに、先手と後手は $M$ 枚のカードを持っている。この $M$ 枚のカードのことを「手札」と呼ぶ。ここで、 $M \equiv 2 \pmod 3$ であることが保証される。残りの $3N - 2M$ 枚のカードのことを「山札」と呼び、山札は各カードが表向きに横に並べられている。
  • 先手と後手は、自分の手番に次の操作を順に行う。
    • 山札から1枚のカードを引く。これと自分の $M$ 枚のカードを合わせた $M + 1$ 枚のカードからちょうど $\frac{M + 1}{3}$ 組のセットを作ることができた場合、その時点で上がりとなり、上がった方の勝利となる。
    • 上がりの状態にならなかった場合、 $M + 1$ 枚の中から好きなカードを $1$ 枚選び、そのカードを捨てて自分の手番を終える。捨てたカードは以降ゲーム中で使用されることはない。
  • すべての山札を引き切っても互いに上がることができなかった場合、ゲームは引き分けとなりどちらの勝利にもならない。

Aliceが先手、Bobが後手でこのゲームで遊びます。今、ゲーム開始時のAliceの手札が正整数列 $A = (A_1, A_2, \cdots, A_M)$ 、Bobの手札が正整数列 $B = (B_1, B_2, \cdots, B_M)$ 、山札の状態が正整数列 $C = (C_1, C_2, \cdots, C_{3N-2M})$ として与えられます。 $C_i$ は山札の上から $i$ 番目のカードであることを表しており、すなわち $i$ が奇数ならAliceが引くカード、偶数ならBobが引くカードであることを表しています。
次の形式の質問が $Q$ 個与えられます。すべての質問について答えてください。

  • $i$ 個目の質問では、 $1 \le l_i \le r_i \le 3N - 2M$ を満たす正整数 $l_i, r_i$ が与えられる。Aliceは $1$ 枚目の山札を引く前に、山札の先頭から $l_i$ 枚目から $r_i$ までのカードを自由に並べ替えられる。AliceとBobがゲームで最善な行動をとるとき、カードを適切に並び変えることでAliceが勝利することは可能か?

制約

Final (20点)

  • $2 \le N \le 1000$
  • $2 \le M < \frac{3}{2}N$
  • $M \equiv 2 \pmod 3$
  • $1 \le Q \le 3000$
  • $1 \le A_i, B_i, C_i \le N$
  • $1 \le l_i \le r_i \le 3N - 2M$
  • $A, B, C$ のそれぞれに含まれる各整数 $i$ の個数の和は $3$

Hard (60点)

  • Finalの制約に以下の制約を追加
  • $M = 2$

Normal (30点)

  • Finalの制約に以下の制約を追加
  • $M = 2$
  • $r_1 = 3N - 2M$

Easy (80点)

  • Finalの制約に以下の制約を追加
  • $M = 2$
  • $Q = 1$
  • $r_1 = 3N - 2M$
  • $r_1 - l_1 + 1 \le \min(8, 3N - 2M)$

Beginning (10点)

  • Finalの制約に以下の制約を追加
  • $N = 2$
  • $M = 2$
  • $Q = 1$
  • $l_1 = 1$
  • $r_1 = 3N - 2M$

入力

$N\ \ M\ \ Q$
$A_1\ \ A_2\ \ \dots \ \ A_M$
$B_1\ \ B_2\ \ \dots \ \ B_M$
$C_1\ \ C_2\ \ \dots \ \ C_{3N-2M}$
$l_1\ \ r_1$
$l_2\ \ r_2$
$\ \vdots$
$l_Q\ \ r_Q$

出力

$Q$ 行出力してください。
$i$ 行目では $i$ 番目の質問に対する解答を、Aliceが勝利することができるならYesと、そうでなければNoと出力し、最後に改行してください。

入力例 1
2 2 1 1 1 2 2 2 1 1 2
出力例 1
Yes

$C = \lbrace1, 2\rbrace$ と並び替えれば、Aliceは $1$ ターン目に $1$ を $3$ 枚そろえ、勝利することができます。
入力例1はBeginning, Easy, Normal, Hard, Finalの制約を満たします。

入力例 2
5 2 1 1 2 5 3 1 2 3 2 5 3 4 4 1 5 4 5 11
出力例 2
Yes

例えば、 $C = \lbrace1, 2, 3, 2, 4, 1, 4, 3, 4, 5, 5\rbrace$ と並び替えれば、Aliceは $9$ ターン目に $4$ を $3$ 枚そろえ、勝利することができます。
入力例2はEasy, Normal, Hard, Finalの制約を満たします。

入力例 3
5 2 3 4 3 2 3 5 2 5 3 1 4 4 1 5 2 1 2 9 2 2 1 5
出力例 3
Yes Yes Yes

入力例3はHard, Finalの制約を満たします。

入力例 4
10 8 5 10 8 5 9 7 10 8 3 6 9 4 5 3 7 5 6 1 10 7 4 6 3 2 8 9 2 4 2 1 1 1 14 2 11 1 1 6 12 1 5
出力例 4
Yes No No No No

入力例4はFinalの制約を満たします。

提出
C++23 (g++ 12.2.0)