> For the complete documentation index, see [llms.txt](https://xtecna.gitbook.io/solucoes-da-beecrowd/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://xtecna.gitbook.io/solucoes-da-beecrowd/ad-hoc/1542-lendo-livros.md).

# 1542 - Lendo Livros

Aqui precisamos de um pensamento um pouquinho mais elaborado...

## Descrição

{% embed url="<https://www.urionlinejudge.com.br/judge/pt/problems/view/1542>" %}

## Descrição

Para qualquer valor de páginas do livro e qualquer velocidade, podemos calcular nosso tempo de leitura da seguinte maneira:

$$
\text{Tempo de leitura} = \frac{\text{Páginas do livro}}{\text{Velocidade de leitura}}
$$

No enunciado, temos duas velocidades distintas onde, na velocidade mais rápida, economizamos uma quantidade de dias estabelecida pela entrada. Em outras palavras, podemos formar uma equação tal qual

$$
\frac{\text{Páginas do livro}}{\text{Velocidade lenta}} = \frac{\text{Páginas do livro}}{\text{Velocidade rápida}} + \text{Tempo economizado}
$$

Considerando velocidade lenta como `Q`, tempo economizado como `D` e velocidade rápida como `P`, podemos descobrir nossa variável de interesse que são as páginas do livro (que podemos chamar de `L`). Logo

$$
\frac{L}{Q} = \frac{L}{P} + D\\
LP = LQ + DPQ\\
LP - LQ = DPQ\\
L(P - Q) = DPQ\\
L = \frac{DPQ}{P - Q}
$$

{% hint style="warning" %}
Na linguagem Python, mudei a exceção a ser capturada para `ValueError` pois o programa deve parar de executar quando não conseguirmos mais receber os três valores.
{% endhint %}

{% tabs %}
{% tab title="C99" %}

```c
#include <stdio.h>

int main(){
    int Q, D, P, L;

    while(scanf("%d", &Q)){
        if(!Q)  break;

        scanf("%d %d", &D, &P);

        L = (Q * D * P)/(P - Q);
        
        printf("%d pagina", L);
        if(L > 1)   printf("s");
        printf("\n");
    }

    return 0;
}
```

{% endtab %}

{% tab title="C++17" %}

```cpp
#include <iostream>

using namespace std;

int main(){
    int Q, D, P, L;

    while(cin >> Q){
        if(!Q)  break;

        cin >> D >> P;

        L = (Q * D * P)/(P - Q);

        cout << L << " pagina";
        if(L > 1)   cout << "s";
        cout << endl;
    }

    return 0;
}
```

{% endtab %}

{% tab title="JavaScript 12.18" %}

```javascript
var input = require('fs').readFileSync('/dev/stdin', 'utf8');
var lines = input.trim().split('\n');

while(lines.length){
    let [Q, D, P] = lines.shift().trim().split(' ').map((x) => parseInt(x));

    if(!D)  break;

    L = Math.floor((Q * D * P)/(P - Q));

    console.log(`${L.toFixed(0)} pagina${L > 1 ? 's' : ''}`);
}
```

{% endtab %}

{% tab title="Python 3.9" %}

```python
while True:
    try:
        Q, D, P = [int(x) for x in input().strip().split(' ')]

        L = (Q * D * P)//(P - Q)

        print(f"{L} pagina{'s' if L > 1 else ''}")        
    except ValueError:
        break
```

{% endtab %}
{% endtabs %}
