Files
2022-04-05 23:36:59 +05:30

2.5 KiB
Raw Permalink Blame History

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
5900f4111000cf542c50ff24 Problema 165: Interseções 5 301799 problem-165-intersections

--description--

Um segmento é definido exclusivamente por seus dois pontos de extremidade. Considerando dois segmentos de reta em geometria plana, há três possibilidades: os segmentos têm zero pontos, um ponto, ou infinitos pontos em comum.

Além disso, quando dois segmentos têm exatamente um ponto em comum, pode acontecer que esse ponto comum seja um ponto de extremidade de um dos segmentos ou de ambos. Se um ponto comum de dois segmentos não for um ponto de extremidade de nenhum dos segmentos, ele é um ponto interno de ambos os segmentos.

Chamaremos de ponto comum T de dois segmentos L_1 e L_2 um ponto de interseção verdadeira de L_1 e L_2 se T for o único ponto comum de L_1 e L_2 e se T for um ponto interior de ambos os segmentos.

Considere os três segmentos L_1, L_2, e L_3:

$$\begin{align} & L_1: (27, 44) \;\text{to}\; (12, 32) \\ & L_2: (46, 53) \;\text{to}\; (17, 62) \\ & L_3: (46, 70) \;\text{to}\; (22, 40) \\ \end{align}$$

É possível verificar que os segmentos de reta L_2 e L_3 têm um ponto de interseção verdadeira. Percebemos que, como um dos pontos de extremidade de L_3: (22, 40) fica sobre L_1, este não é considerado um ponto de interseção verdadeira. L_1 e L_2 não têm um ponto em comum. Portanto, entre os três segmentos de reta, encontramos um ponto de interseção verdadeira.

Façamos agora o mesmo em 5.000 segmentos de reta. Para isso, geramos 20.000 números usando o chamado gerador pseudoaleatório de números "Blum Blum Shub".

$$\begin{align} & s_0 = 290797 \\ & s_{n + 1} = s_n × s_n (\text{modulo}\; 50515093) \\ & t_n = s_n (\text{modulo}\; 500) \\ \end{align}$$

Para criar cada segmento de reta, usamos quatro números consecutivos t_n. Ou seja, o primeiro segmento de reta é dado por:

($_t$1, t_2) a (t_3, t_4)

Os primeiros quatro números calculados de acordo com o gerador acima devem ser: 27, 144, 12 e 232. O primeiro segmento seria, portanto, de (27, 144) a (12, 232).

Quantos pontos de interseção verdadeira distintos se encontram entre os 5.000 segmentos de reta?

--hints--

distinctIntersections() deve retornar 2868868.

assert.strictEqual(distinctIntersections(), 2868868);

--seed--

--seed-contents--

function distinctIntersections() {

  return true;
}

distinctIntersections();

--solutions--

// solution required