#CF1312C. 加幂次

    ID: 6501 传统题 1000ms 256MiB 尝试: 2 已通过: 1 难度: 4 上传者: 标签>贪心数论其他数学三分查找线性代数位运算模拟模拟*1400

加幂次

C. 加幂次
每次测试的时间限制:2 秒
每次测试的内存限制:256 兆字节

假设你正在执行以下算法。
开始时,有一个数组 v1,v2,,vnv_1, v_2, \dots, v_n 全部被填充为 00
对该数组多次应用以下操作 —— 在第 ii 步(00 索引)你可以:

  • 选择一个位置 pospos1posn1 \leq pos \leq n),并将 vposv_{pos} 增加 kik^i
  • 或者不选择任何位置,跳过这一步。

你可以决定算法在每一步的行为以及何时停止。
问题是:在某个步骤之后,你能否使数组 vv 等于给定的数组 aa(即对于每个 jjvj=ajv_j = a_j)?

输入
第一行包含一个整数 TT1T10001 \leq T \leq 1000)——测试用例的数量。
接下来是 2T2T 行,每个测试用例两行。
每个测试用例的第一行包含两个整数 nnkk1n301 \leq n \leq 302k1002 \leq k \leq 100)——数组 vvaa 的大小以及算法中使用的 kk 值。
第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n0ai10160 \leq a_i \leq 10^{16})——你希望得到的数组。

输出
对于每个测试用例,如果你能在某步之后得到数组 aa,则输出 YES(大小写不敏感),否则输出 NO

示例
输入:

5
4 100
0 0 0 0
1 2
1
3 4
1 4 1
3 2
0 1 3
3 9
0 59049 810

输出:

YES
YES
NO
NO
YES

提示

  • 第一个测试用例中,你可以在第 00 步之前停止算法,或者多次不选任何位置然后停止。
  • 第二个测试用例中,你可以将 k0k^0 加到 v1v_1 上,然后停止。
  • 第三个测试用例中,你无法在数组 vv 中得到两个 11
  • 第五个测试用例中,你可以跳过 909^0919^1,然后将 929^2939^3 加到 v3v_3 上,跳过 949^4,最后将 959^5 加到 v2v_2 上。