#P3481. [POI 2009] PRZ-Algorithm Speedup

[POI 2009] PRZ-Algorithm Speedup

Description

由于行为不端,Byteasar 被要求计算一个神秘且棘手的布尔值函数 F(x,y)F(x,y),该函数定义在一对正整数序列 x=(x1,x2,,xn)x=(x_1,x_2,\cdots,x_n)y=(y1,y2,,yn)y=(y_1,y_2,\cdots,y_n) 上,如下所示:

  • 布尔函数 F(x,y)F(x, y)
  • 如果 W(x)W(y)W(x) \neq W(y) 则返回 00
  • 否则如果 W(x)=W(y)=1|W(x)|=|W(y)|=1 则返回 11
  • 否则返回 F(p(x),p(y))F(s(x),s(y))F(p(x), p(y)) \wedge F(s(x), s(y))

其中:

  • W(x)W(x) 表示序列 xx 的成员集合(元素的顺序和重复无关紧要),
  • p(x)p(x) 表示序列 xx 的最长前缀(任意长度的初始部分),使得 W(x)W(p(x))W(x) \neq W(p(x))
  • s(x)s(x) 表示序列 xx 的最长后缀(任意长度的末尾部分),使得 W(x)W(s(x))W(x) \neq W(s(x))
  • \wedge 表示逻辑与,1 表示真,0 表示假,z|z| 表示集合 zz 的基数。

例如,对于序列 x=(2,3,7,2,7,4,7,2,4)x=(2,3,7,2,7,4,7,2,4),我们有:W(x)={2,3,4,7}W(x)=\{2,3,4,7\}p(x)=(2,3,7,2,7)p(x)=(2,3,7,2,7)s(x)=(7,2,7,4,7,2,4)s(x)=(7,2,7,4,7,2,4)。对于非常大的数据,直接从定义计算函数 FF 的值的程序速度太慢。因此,你需要尽可能快地进行这些计算。

编写一个程序,从标准输入读取若干对序列 (x,y)(x,y),并在标准输出中打印每个输入对的 F(x,y)F(x,y) 值。

Input Format

标准输入的第一行包含一个整数 kk (1k131\le k\le 13),表示要分析的序列对的数量。

接下来的 3k3k 行包含测试用例的描述。

每个描述的第一行包含两个整数 nnmm (1n,m100,0001\le n,m\le 100{,}000),用单个空格分隔,表示第一和第二序列的长度。

第二行包含 nn 个整数 xix_i (1xi1001\le x_i\le 100),形成序列 xx,以单个空格分隔。

第三行包含 mm 个整数 yiy_i (1yi1001\le y_i\le 100),形成序列 yy,以单个空格分隔。

Output Format

输出应由正好 kk 行组成;第 ii 行(对于 1ik1\le i\le k)应包含一个整数 - 0 或 1 - 表示第 ii 个测试用例的 F(x,y)F(x, y) 值。

2
4 5
3 1 2 1
1 3 1 2 1
7 7
1 1 2 1 2 1 3
1 1 2 1 3 1 3

0
1

Hint

题面翻译由 ChatGPT-4o 提供。