El conocido problema 4-SAT consiste en lo siguiente: Tenemos m variables booleanas (sólo pueden valer cierto o falso). Además, tenemos n cláusulas, formadas cada una por cuatro variables, no necesariamente diferentes. Veamos un ejemplo de clásula:
x1 ∨ x5 ∨ ¬ x3 ∨ x4 |
El símbolo ∨ es la OR booleana, y el símbolo ¬ es la NOT booleana. Así pues, la cláusula es falsa sólo si x1, x5 y x4 son falsas, y x3 es cierta.
El problema 4-SAT original pide asignar valores a las variables de manera que todas las cláusulas sean ciertas, o decir que no hay solución. Como ese problema es demasiado difícil, os pedimos una versión más sencilla: ¿Podéis encontrar una asignación tal que al menos el 90% de las cláusulas sean ciertas?
Entrada
La entrada tiene diversos casos. Cada uno empieza con n y m, seguidas de las n claúsulas, codificadas con cuatro enteros entre −m y m, sin ningún cero. Una i positiva indica xi, y una i negativa indica ¬ xi. Se garantiza que la entrada se ha generado de forma aleatoria.
Salida
Escribid una línea para cada caso. Si no existe solución, escribid “WA”. Si existe, escribid m caracteres indicando el valor de las variables en orden: ‘0’ para falso y ‘1’ para cierto. Si hay más de una posible asignación, cualquiera sirve.
Puntuación
Input
2 4 -2 3 -4 3 -2 1 2 -2 2 3 -2 -1 -2 1 2 2 -3 -1 5 3 1 2 2 2 1 3 3 3 -1 -2 -2 -2 -1 2 2 2 1 3 3 3 2 5 -4 -5 -5 -4 2 1 -2 -4 4 6 -4 2 -2 -3 -4 -6 1 -6 -3 -6 -1 -1 1 -2 -3 6
Output
1011 110 011 00000 101100