问题2573--善良的wjk

2573: 善良的wjk

[命题人 : ]
时间限制 : 1 sec  内存限制 : 128 MB

提交

题目描述

wjk主动帮助damn来完成一个任务。
这次,wjk需要帮助damn解决以下问题: 
有两个长度为 \(n\) (\(1 \leq n \leq 100\))的整数数组 \(a\) 和 \(b\) 。
结果发现数组 \(a\) 只包含集合\(\{-1, 0, 1\}\)中的元素。

wjk可以任意多次执行下面的操作序列: 
选择任意一对索引\((i, j)\),使得\(1 \leq i < j \leq n\) (\(1 \leq n \leq 100\))。
可以多次选择同一对索引\((i, j)\),将 \(a_{i}\) 添加到 \(a_{j}\) 中。
句话说,选择\((i, j)\)就意味着数组中的第 \(j\) 个元素 \(a_{j}\) = \(a_{i} + a_{j}\)。

例如,如果给定数组\(a\)为:\([1, -1, 0]\),那么通过一次操作,在\(1 \leq i < j \leq n\)范围内
选择\((2, 3)\),\([1, -1, 0]\)->\([1, -1, -1]\) 
选择\((1, 2)\),\([1, -1, 0]\)->\([1, 0, 0]\)
选择\((1, 3)\),\([1, -1, 0]\)->\([1, -1, 1]\)。 

wjk想知道是否有可能对数组 \(a\) 进行一定数量(\(0\) 或更多)的运算,使其与数组 \(b\) 相等。
你能帮助他吗?

输入

每个测试都包含多个测试用例。 第一行包含测试用例的数量 \(t\) (\(1 \leq t \leq 100\))。
测试用例说明如下。 每个测试用例的第一行都包含一个整数 \(n\) (\(1 \leq n \leq 10000\))——数组的长度。 
每个测试用例的第二行包含 \(n\) 个整数 \(a_1, a_2, \cdots, a_n\) (\(-1 \leq a_i \leq 1\))——数组 \(a\) 的元素。
每个测试用例的第三行包含 \(n\) 个整数 \(b_1, b_2, \cdots, b_n\) (\(-10000 \leq b_i \leq 10000\))——数组 \(b\) 的元素。
元素之间可能存在重复。 保证所有测试用例中 \(n\) 的总和不超过 \(10000\)。

输出

对于每个测试用例,

如果可以通过执行所述操作使数组 a 和 b 相等,则输出"YES ";

如果不可能,则输出一行包含 "NO "。

样例输入 Copy

5
3
1 -1 0
1 1 -2
3
0 1 1
0 2 2
2
1 0
1 41
2
-1 0
-1 -41
5
0 1 -1 1 -1
1 1 -1 1 -1

样例输出 Copy

YES
NO
YES
YES
NO

提示

在第一个测试用例中,我们可以两次选择 (i,j)=(2,3),之后再两次选择 (i,j)=(1,2)。这些操作将转换 [1,−1,0]→[1,−1,−2]→[1,1,−2]

在第二个测试用例中,我们无法在第二个位置上选择相等的数字。

在第三个测试案例中,我们可以选择 (i,j)=(1,2),41 次。

第四个测试案例也是如此。

在最后一种情况下,不可能使数组 a 等于数组 b。

来源/分类