#HK5097. 「POI2009 R1」算法加速 Algorithm Speedup
「POI2009 R1」算法加速 Algorithm Speedup
题目描述
题目译自 XVI OI Olimpiada Informatyczna – I etap Przyspieszenie algorytmu
Bajtazar 因故需计算一个复杂而神秘的逻辑函数 ,对于两个自然数序列 和 ,其定义如下:
$ \begin{aligned} & \text { boolean } \mathbf{F}(x, y) \\ & \text { if } \mathbf{W}(x) \neq \mathbf{W}(y) \text { then return } \mathbf{0} \\ & \text { else if }|\mathbf{W}(x)|=|\mathbf{W}(y)|=1 \text { then return } 1 \\ & \text { else return } \mathbf{F}(\mathbf{p}(x), \mathbf{p}(y)) \wedge \mathbf{F}(\mathbf{s}(x), \mathbf{s}(y)) \text {. } \end{aligned} $
其中:
- 表示序列 中所有数字的集合(忽略重复和顺序)。
- 是 的最长前缀,使得 。
- 是 的最长后缀,使得 。
- 表示逻辑与, 表示真, 表示假, 表示集合 的元素个数。
例如,对于序列 ,有:
$$\mathbf{W}(x) = {2, 3, 4, 7}, \quad \mathbf{p}(x) = (2, 3, 7, 2, 7), \quad \mathbf{s}(x) = (7, 2, 7, 4, 7, 2, 4) $$直接按定义计算函数对于大数据量极慢。你的任务是尽可能加速计算此函数。
编写程序,从标准输入读取若干序列对 ,并在标准输出中打印每个序列对的 值。
输入格式
第一行包含一个整数 ,表示需分析的序列对数量。
接下来的 行描述输入数据,每组测试数据占三行:
- 第一行包含两个整数 ,表示序列 和 的长度。
- 第二行包含 个整数 ,描述序列 。
- 第三行包含 个整数 ,描述序列 。
输出格式
输出 行,第 行包含一个整数 或 ,表示第 组测试数据的 值。
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