65 lines
3.4 KiB
Markdown
65 lines
3.4 KiB
Markdown
---
|
||
id: 5900f4111000cf542c50ff24
|
||
title: 'Задача 165: Перетини'
|
||
challengeType: 5
|
||
forumTopicId: 301799
|
||
dashedName: problem-165-intersections
|
||
---
|
||
|
||
# --description--
|
||
|
||
Сегмент визначається лише двома кінцевими точками. Розглядаючи два відрізки лінії у планіметрії є три можливості: сегменти мають нуль точок, одну точку або нескінченно багато спільних точок.
|
||
|
||
Крім того, коли два відрізки мають лише одну спільну точку, це може бути той випадок, коли спільною точкою є кінцева точка або одного з окремих сегментів, або обох. Якщо спільна точка двох сегментів не є кінцевою точкою будь-якого із сегментів, то це внутрішня точка обох сегментів.
|
||
|
||
Ми назвемо спільну точку $T$ двох відрізків $L_1$ і $L_2$ справжньою точкою перетину $L_1$ і $L_2$, якщо $T$ є єдиною спільною точкою $L_1$ і $L_2$ і $T$ є внутрішньою точкою обох відрізків.
|
||
|
||
Розглянемо три сегменти $L_1$, $L_2$та $L_3$:
|
||
|
||
$\begin{align} & L_1: (27, 44) \\;\text{to}\\; (12, 32) \\\\
|
||
& L_2: (46, 53) \\;\tтекст{to}\\; (17, 62) \\\\ & L_3: (46, 70) \\;\tтекст{to}\\; (22, 40) \\\\
|
||
\end{align}$$
|
||
|
||
Можна перевірити, що відрізки ліній $L_2$ і $L_3$ мають справжню точку перетину. Ми зазначали, що, якщо одна з кінцевих точок $L_3$: (22, 40) лежить на $L_1$, це не вважається справжньою точкою перетину. $L_1$ і $L_2$ не мають спільної точки. Отже, на трьох відрізках прямої ми знаходимо одну справжню точку перетину.
|
||
|
||
Тепер зробімо те саме для 5000 прямих відрізків. З цією метою ми згенеруємо 20000 чисел, використовуючи так званий генератор псевдо-випадкових чисел «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}$
|
||
|
||
Щоб створити кожен відрізок, ми використовуємо чотири послідовних числа $t_n$. Тобто перший відрізок дано:
|
||
|
||
($_t$1, $t_2$) до ($t_3$, $t_4$)
|
||
|
||
Перші чотири числа вичислені згідно зі згаданим генератором, мають бути: 27, 144, 12 та 232. Перший відрізок, таким чином, буде (27, 144) до (12, 232).
|
||
|
||
Скільки окремих точок перетину буде знайдено серед 5000 відрізків прямих ліній?
|
||
|
||
# --hints--
|
||
|
||
`distinctIntersections()` має повертати `2868868`.
|
||
|
||
```js
|
||
assert.strictEqual(distinctIntersections(), 2868868);
|
||
```
|
||
|
||
# --seed--
|
||
|
||
## --seed-contents--
|
||
|
||
```js
|
||
function distinctIntersections() {
|
||
|
||
return true;
|
||
}
|
||
|
||
distinctIntersections();
|
||
```
|
||
|
||
# --solutions--
|
||
|
||
```js
|
||
// solution required
|
||
```
|