Module: Iterar sobre todos los subpatrones de una máscara dada


Problem

1 /7


Cadenas binarias de longitud dada

Theory Click to read/hide

Sucede que es necesario enumerar todas las secuencias de bits de cierta longitud. O, en otras palabras, iterar sobre todas las opciones posibles, donde para cada objeto se selecciona uno de los dos estados posibles.

En tales situaciones, es posible implementar la enumeración utilizando máscaras de bits. La ventaja de este enfoque es que dicho código funciona de forma no recursiva y opera con números en lugar de colecciones o similares, lo que mejora enormemente el rendimiento.

El código general que usa máscaras de bits se proporciona a continuación: interno; // número de oobjects (longitud de la secuencia de bits) for (int mask = 0; mask < (1 << n); mask++) { // recorrer todos los números del 0 al 2^n - 1, donde cada número corresponde a una máscara de bits // la máscara de número actual es una máscara de bits, donde el i-ésimo bit especifica el estado del i-ésimo objeto for (int i = 0; i < n; i++) { // iterar sobre n bits para comprender qué estado tiene cada objeto if ((1 << i) & mask) { // comprueba si el i-ésimo bit es igual a uno // procesa la opción de que el i-ésimo objeto tiene el estado '1' } else { // caso cuando el i-ésimo bit es cero // procesar la opción de que el i-ésimo objeto del estado '0' } } }
Este código se ejecuta en O(2^n * f(n)), donde f(n) es el tiempo que le lleva procesar un iterable en particular.

Problem

Dado el número N, imprime todas las cadenas de longitud N que constan de ceros y unos en orden lexicográfico.

Al resolver el problema, utilice la enumeración de todos los subpatrones.

Entrada

Se da el único número N. (natural, 1 ≤ N ≤ 10)

Salida

Es necesario imprimir todas las cadenas de longitud N formadas por ceros y unos en orden lexicográfico, una por línea

Entrada Salida 2 00 01 10 11