cf ronda 83 c

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


NO
NO

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;
}

Publicado 85 artículos originales · ganado elogios 7 · vistas 2144

Supongo que te gusta

Origin blog.csdn.net/Fawkess/article/details/104774617
Recomendado
Clasificación