Puede que haya una manera más fácil de hacerlo, pero aquí hay una forma.
Considere la contribución de cinco partes:
- Cualquier cantidad en el lado izquierdo que se extienda a la región más a la izquierda $A$
- Cualquier cantidad que se encuentre en la región más a la izquierda $B$
- La cantidad que cubre completamente algún número de bloques alternos $A/B$
- Cualquier cantidad en el lado derecho que se extienda a la región más a la derecha $A$
- Cualquier cantidad que se encuentre en la región más a la derecha $B$
Abordemos los dos primeros de la lista anterior.
Sabemos que $D \leq a+b$ . Si $D=0$ entonces la contribución es $a$ y desciende linealmente hasta $0$ como $D$ va a $a$ . Por lo tanto, la contribución es $a(1-(D/a))$ hasta $D=a$ .
Aunque la contribución se detiene en $D=a$ , esa función no lo hace. Nos gustaría "apagarlo" después de $D=a$ . O, dicho de otro modo, queremos "activar" una función en $D=a$ que resta la contribución.
Podemos utilizar el Función escalonada de Heaviside $H(x)$ para hacer esto. Queremos añadir una contribución $a(D-a)/a = D-a$ pero sólo si $D \geq a$ . Lo hacemos multiplicando por la función de Heaviside en $x=a$ que lo "enciende" allí.
Así, para los dos primeros bloques $A/B$ la contribución es
$$C_{1,2} = a(1-(D/a)) + H(a)(D-a).$$
Para la tercera región, tendremos que calcular el número de pares de bloques $A/B$ que la barra cubra completamente. Para ello podemos utilizar el función del suelo para forzar que una función continua tome un valor entero.
Restamos la parte que acabamos de tratar y luego utilizamos la función suelo en el resto:
$$C_3 = a\lfloor [L-(a+b-D)]/(a+b) \rfloor$$
Ahora nos queda lo que cuelga en el lado derecho.
El borde izquierdo del extremo derecho $A/B$ bloque está en $x=(a+b)\lfloor(D+L)/(a+b)\rfloor$ .
La contribución es lineal hasta $x+a$ y se detiene después de eso.
Así que, finalmente,
$$C_{4,5} = D+L-x - H(x+a)[D+L-x-a].$$
Suma estos, sustituye $x$ en función de $D,L,a,b$ y ya tienes la respuesta.