Supongamos que se está llevando a cabo el siguiente algoritmo. Hay una gran variedad v1, v2, ..., vn llena de ceros en el arranque. La siguiente operación se aplica a la matriz de varias veces - al i-ésimo paso (0-indexada) puede:
elegir la posición pos (1≤pos≤n) y aumentar vpos por Ki;
o no elegir cualquier posición y omitir este paso.
Usted puede elegir cómo el algoritmo se comportaría en cada paso y cuándo detenerlo. La pregunta es: ¿se puede hacer arsenal v igual a la matriz dada un (vj = aj para cada j) después de un paso?
Input
La primera línea contiene un entero T (1≤T≤1000) - el número de casos de prueba. Siguiente líneas 2T contienen casos de prueba - dos líneas por cada caso de prueba.
La primera línea de cada caso de prueba contiene dos números enteros n y k (1≤n≤30, 2≤k≤100) - el tamaño de las matrices V y una y el valor k utilizado en el algoritmo.
La segunda línea contiene n enteros a1, a2, ..., an (0≤ai≤1016) - la matriz desea lograr.
Salida
Para cada caso de prueba de impresión SÍ (mayúsculas y minúsculas) si se puede lograr la matriz después de un poco de paso o NO (mayúsculas y minúsculas) en caso contrario.
entrada Copia
5
4 100
0 0 0 0
1 2
1
3 4
1 4 1
3 2
0 1 3
3 9
0 59 049 810
salida de las copias
SÍ
SÍ
NO
NO
SÍ
int t, n,k;
ll a[55];
int index, ji[64];
int main() {
scanf("%d", &t);
while (t--) {
scanf("%d%d", &n,&k);
for (int i = 0; i < n; i++)
scanf("%lld", a + i);
ms(ji, 0);
bool flag = true;
for (int i = 0; i < n; i++) {
index = 0;
if (!flag) break;
while (a[i]) {
if ((a[i] - 1) % k == 0 && ji[index] == 0) {
a[i]--;
if(a[i]) a[i] /= k;
ji[index++] = 1;
}
else if (a[i] % k == 0) {
a[i] /= k;
index++;
}
else {
flag = false;
break;
}
}
}
if (flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}