Una consulta, en el algoritmo de la parte a, en vez de lo que decia la solucion, se podria haber hecho una especie de algoritmo greedy que vas iterando miestras K sea mayor a 0 y D no sea vacio, y que adentro del while eliminas a todos los que son compatibles con eso, chequeando con la funcion B. O sea quedaria algo asi:
i=1
while (k>0 and D distinto de vacio) do
quitar todos los dispositivos de D que abarca t(i) // se puede hacer con dos for verificando con B
k--
i++
endwhile
return D== vacio
end