筹码堆拿取对局

普及⏱ 1000ms💾 256MB#P5172🏷️ SG函数博弈论

题目描述

桌上有 $N$ 堆筹码,第 $i$ 堆有 $A_i$ 枚。甲乙轮流操作:每次选定一堆, 从中拿走若干枚,拿取数量必须是给定集合 $\{B_1, B_2, \ldots, B_M\}$ 之一。 无法操作者输。甲先手。双方均采取最优策略: 问甲是否有必胜策略;若有,输出甲的第一步操作(拿哪一堆、拿多少枚)—— 多解时选堆编号最小的方案,仍多解时选拿取枚数最少的方案。

输入格式

第一行一个整数 $N$。 接下来 $N$ 行每行一个整数 $A_i$。 接下来一行一个整数 $M$。 接下来 $M$ 行每行一个整数 $B_i$(保证递增排列)。

输出格式

第一行:$YES$(甲有必胜策略)或 $NO$。 若为 $YES$,第二行输出两个整数:堆编号与拿取枚数,以空格分隔。

数据范围

None

样例输入 #1
4
7
6
9
3
2
1
2
样例输出 #1
YES
1 1
样例输入 #2
1
5
3
1
2
4
样例输出 #2
YES
1 2