Esta es una pregunta de un concurso de programación (no sé exactamente a qué concurso de programación pertenece, lo vi hace un año). La pregunta es la siguiente:Encontrar altura común de edificios con un costo mínimo
hay N edificios, cada uno con su propia altura (no necesariamente único)
{h1,h2,h3,...,hn}
Tenemos que hacer todos los edificios de la misma altura dicen h.
Las operaciones permitidas son:
- podemos añadir un poco de altura a un edificio.
- Podemos eliminar algo de altura de un edificio.
Hay un costo asociado con cada edificio para eliminar/agregar una altura de unidad. Supongamos que c (i) es el costo de eliminar/agregar una altura de unidad a un edificio. El costo correspondiente son los siguientes:
{c1,c2,c3,...,cn}
Suponiendo que tenemos suficiente altura (unidad) disponibles, tenemos que encontrar el costo mínimo que se requiere para hacer que todos los edificios de la misma altura.
Entrada: First Line especificará N el número de edificios. (1 < = N < = 100000). La segunda línea de entrada será para la altura de los edificios.
{h1,h2,h3,...,hn}
Tercera línea de entrada dará la matriz de costo
{c1,c2,c3.....,cn}
salida
La salida será simplemente el costo min requiere.
Ejemplo de entrada:
3
2 1 3
10 1000 1
Muestra de salida
12
Explicación: Hacer que todos los edificios de altura 1, por lo que el costo será 10 * (2-1) + 1000 * (1-1) + 1 * (3-1) es decir 12.
Conozco el método de fuerza bruta que es O (n^2).
El método de fuerza bruta que pensé es como sigue:
Cualquiera que sea la altura común h sea, debe ser de la
{h1,h2,h3,....,hn}
es decir, h debe ser igual a cualquiera de h (i). Ahora comprobando cada h (i) puedo calcular la respuesta en O (n^2).
¿es posible hacerlo más rápido?
¿cuál es el tamaño de la entrada? También deberías explicar el método 'O (n^2)' que piensas. Una entrada y salida de muestra también mejorará la pregunta. – amit
@amit Editado la pregunta. –
Editado mi solución. Echar un vistazo. Espero eso ayude ! – user1599964