B - Bits reordenados

Languages: C, C++, Java, Haskell, Pascal, Python, JavaScript, Tiger, C#
Time & Memory limits: (details)

Las cadenas de bits son cadenas que solo contienen 0s y 1s.

Fito tiene que ordenar una cadena de bits y la única operación que el puede hacer es intercambiar un par adyacente. Tu tarea es ayudarlo a encontrar la menor cantidad de operaciones que debe hacer para lograrlo.
La cadena inicial se representa simplemente por una cadena de bits y el objetivo se representa con una cadena de enteros que llamaremos código. Estos enteros significan las longitudes de los bloques de 0s y 1s que se deben obtener al final. Por ejemplo el código de “011100” es “1 3 2”. Es importante notar que hay dos posibles cadenas para un código determinado, una que empieza por “0” y otra que empieza por “1”. El objetivo, dada la cadena inicial y el código que se desea obtener, es cualquiera de las dos posibles cadenas que representan ese código.

Input

Línea 1 : Dos enteros $N (1 \leq N \leq 15)$ y $M (1 \leq M \leq N)$. $N$ es la longitud de la cadena de bits y $M$ la cantidad de enteros en el código.
Línea 2 : En la segunda línea estará la cadena de bits.
Línea 3 : El código.

Se garantiza que la suma de los enteros del código es igual a la cantidad a la longitud de la cadena de bits y que existe forma de reordenarlos para obtener el código deseado.

Output

Un entero que representa la menor cantidad de pasos que hacen falta.

Sample test(s)

Input
6 3 1 0 0 1 0 1 1 3 2
Output
1
Input
7 2 1 1 1 0 0 0 0 4 3
Output
12
Input
15 14 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2
Output
7
Input
1 1 0 1
Output
0