e-olimp 5074. Степени вершин по спискам ребер

Задача:

Неориентированный граф задан списком ребер.

Найдите степени всех вершин графа.

Технические условия:

Входные данные:

Входной файл содержит числа [latex]n[/latex]  [latex] (1 \leq n \leq 100) [/latex] — число вершин в графе и

[latex]m[/latex]  [latex](1 \leq m \leq \frac{n(n-1)}{2})[/latex] — число ребер. Затем следует [latex]m[/latex] пар чисел — ребра графа.

Выходные данные:

Выведите в выходной файл [latex]n[/latex] чисел — степени вершин графа.

Результат на C++

Результат на Java

Код на C++:

Код на Java:

 

Описание:

Мне дан неориентированный граф, значит каждое упоминание вершины в списке ребер увеличивает её степень на единицу. Заводим массив (размер массива равен числу вершин) и при каждом упоминании вершины увеличиваем её ячейку в массиве на единицу. Выводим результат.

AA1

Задача:

В заданной строке заменить подряд идущие пробелы на один пробел.

Примечание:

Будем называть строку правильной, если она не содержит подряд идущих пробелов.

Тестирование:

 Исходная строка  Оптимистичное ожидание Комментарий
Gagarin               became an                     international celebrity, and was                                              awarded many                     medals and titles, including                       Hero of the                        Soviet Union. Gagarin became an international celebrity, and was awarded many medals and titles, including Hero of the Soviet Union.  Пройден.
 Leonardo                             was, and                             is,                                         renowned                               primarily                         as a                             painter. Leonardo was, and is, renowned primarily as a painter.  Пройден.

Код на С++

Код на Java

 

Пояснение:

Вариант удаления пробелов с помощью [latex]erase()[/latex] является самым очевидным. Но у него больше недостатков, чем достоинств. Данный метод имеет линейную асимптотику, в худшем случае он выполнил бы [latex]n — 1[/latex] ( в дальнейшем [latex]»n»[/latex] — это длина строки ) сдвиг в индексах строки.

Другой способ — создание новой строки и добавление туда только нужных нам символов. Единственная проблема — новая строка, т. е. в худшем случае у нас появится строка равная данной или же на один символ меньше (если была добавлена проверка на правильность строки).

Второй способ мне нравится больше (просто потому, что он работает), но выделять новую строку очень не хочется. Оказалось, что можно обойтись и без неё. В качестве новой я использовал исходную. Для этого ввел два «указателя» на позиции элементов. Первый пробегает всю строку в цикле, второй же указывает на элемент, этой строки, в который будет положено новое значение. Таким образом, полученная последовательность символов (от нулевой, до [latex]j[/latex] — той не включительно) будет правильной строкой. Осталось удалить элементы на полуинтервале от [latex]j[/latex] до [latex]n[/latex].

 

e-olimp 6130. Дек неограниченного размера.

Задача:

Реализуйте структуру данных «дек«.  Напишите программу, содержащую описание дека и моделирующую работу дека, реализовав все указанные здесь методы. Программа считывает последовательность команд и в зависимости от команды выполняет ту или иную операцию. После выполнения каждой команды программа должна вывести одну строчку. Возможные команды для программы:

push_front

Добавить (положить) в начало дека новый элемент. Программа должна вывести ok.

push_back

Добавить (положить) в конец дека новый элемент. Программа должна вывести ok.

pop_front

Извлечь из дека первый элемент. Программа должна вывести его значение.

pop_back

Извлечь из дека последний элемент. Программа должна вывести его значение.

front

Узнать значение первого элемента (не удаляя его). Программа должна вывести его значение.

back

Узнать значение последнего элемента (не удаляя его). Программа должна вывести его значение.

size

Вывести количество элементов в деке.

clear

Очистить дек (удалить из него все элементы) и вывести ok.

exit

Программа должна вывести bye и завершить работу.

Размер дека должен быть ограничен только размером доступной оперативной памяти. Перед исполнением операций pop_frontpop_backfrontback программа должна проверять, содержится ли в деке хотя бы один элемент. Если во входных данных встречается операция pop_frontpop_backfrontback, и при этом дек пуст, то программа должна вместо числового значения вывести строку error.

Результат на C++

Результат на Java

Код на C++:

Код на Java:

 

Пояснение:

В этом варианте дек был реализован с помощью динамического массива. Так как добавление и  удаление элементов происходит как с начала, так и с конца массива пришлось зациклить ввод и вывод данных. Каждый раз при добавлении (удалении) элемента мы вычисляли новую позицию для указателей по модулю вместимости массива.

Трудности возникли тогда, когда количество элементов в деке сравнялось с вместимостью базового массива. В таком случае необходимо величить вместимость дека. Сделать это можно следующим образом. Нужно создать новый массив, перенести в него элементы старого массива, а после присвоить указателю на старый массив указатель на новый. После увеличения вместимости дека возник вопрос: Куда указывают указатели? Мы их не меняли, а значит они имеют прежние значения, что уже не актуально. Так как первый элемент в новом массиве находится на нулевой позиции, меняем значение указателя на первый элемент (front_) на нуль. Указатель на последний элемент (back_) теперь должен иметь значение равное, уменьшенному на единицу, количеству элементов. Осталось только изменить значение вместимости (capacity), у меня вместимость увеличивается вдвое.

Такая реализация является одной из самых простых. По сравнению с двусвязным списком, она приблизительно в три раза проигрывает в скорости выполнения. Но за счет того, что мы храним только один int на каждый элемент (вместо трех, которые были у списка), такая реализация использует заметно меньше памяти.

 

 

 

e-olimp 4004. Есть ли цикл?

Задача:

  Дан ориентированный граф. Требуется определить, есть ли в нём цикл.

Технические условия:

Входные данные:

В первой строке вводится натуральное число [latex]N ( N \leq 50)[/latex] — количество вершин. Далее в [latex]N[/latex] строках следуют по [latex]N[/latex] чисел, каждое из которых — «0» или «1«. [latex]j [/latex] -е число в [latex]i[/latex] -й строке равно «1» тогда и только тогда, когда существует ребро, идущее из [latex]i[/latex] -й вершины в [latex]j[/latex]-ю. Гарантируется, что на диагонали матрицы будут стоять нули.

Выходные данные:

Выведите «0«, если в заданном графе цикла нет, и «1«, если он есть.

Результат на С++

Результат на Java

Код на С++:

Код на Java:

 

Пояснение:

Циклом в графе называется цепь, в которой первая и последняя вершина совпадает. Значит, если проходя по вершинам графа в лексикографическом порядке, в какой — то момент я попаду в вершину в которую вошел, но еще не вышел, то это будет означать, что я нашёл цикл.

Если б мне по условию давался связный ориентированный граф, то достаточно было бы запустить поиск (поиск в глубину) из произвольной вершины и, по идее, мы бы обошли весь граф. Так как о связности графа ничего сказано не было, пришлось запускать поиск из каждой вершины.

A159

Задача:

Даны натуральное число n, действительные числа [latex]a_{1}, …, a_{n}[/latex] [latex]\left( n\geq 3\right)[/latex] .

Получить [latex]b_{1}, …, b_{n-2}[/latex], где [latex]b_{i} = a_{i + 1} + a_{i + 2}[/latex], [latex]i=1, 2 , … , n-2[/latex].

Таблица:

[latex]a_{1}, …, a_{n}[/latex] [latex]b_{1}, …, b_{n-2}[/latex] Комментарий
1 2 3 4 5 6 7 5 7 9 11 13 Пройден
1.235 2.457 2.543 4.457  4.543 6.457 6.543 5 7 9 11 13 Пройден
 9 -12 17 -10 19 -8 21 5 7 9 11 13 Пройден
-21 26 -21 28 -19 30 -17 22 -15 24 -13 26 5 7 9 11 13 5 7 9 11 13 Пройден
21 -26 21 -28 19 -30 17 -22 15 -24 13 -26 -5 -7 -9 -11 -13 -5 -7 -9 -11 -13 Пройден

Исходный код:

Работать будет и такая версия:

Код на Java

 

 Описание:

Для выполнения условия задачи необходимо пропустить первый элемент первой последовательности и начать суммирование второго и третьего элементов (далее третьего и четвертого, четвертого и пятого и т. д.). Для этого я ввел переменную, в которой будет храниться первый элемент вводимой последовательности (более он использоваться не будет). Далее создаем цикл, в котором будем одновременно вводить значения элементов первой последовательности и выводить элементы результирующей последовательности.

Алгоритм:

  1. Объявление необходимых переменных.
  2. Отдельно ввод первого и второго элемента первой последовательности.
  3. Создание цикла для ввода данных.
    1. Печать суммы второго и третьего элемента первой последовательности (первый элемент результирующей последовательности).
    2. Обеспечение сдвига суммируемых элементов (со второго и третьего на третий и четвертый и т. д.)
  4. Окончание работы программы после завершения цикла.

Ссылка на Ideone.

 

 

 

 

 

A412г

Задача:

Даны две целочисленные квадратные матрицы порядка 6. Найти последовательность из нулей и единиц  [latex]b_{1} , … , b_{6}[/latex] такую, что [latex]b_{i} = 1[/latex], когда:

г) количество отрицательных и неотрицательных элементов [latex] i [/latex]- строки первой матрицы совпадает соответственно с количеством отрицательных и неотрицательных элементов [latex] i[/latex]-строки второй матрицы.

 

  Матрица [latex]A[/latex]

    Матрица [latex]B[/latex]

     Ожидаемый      результат

 Комментарий

   1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
                  1 1 1 1 1 1          Тест пройден
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
                    0 0 0 0 0 0          Тест пройден
 0 2 2 3 4 4
1 3 3 4 5 5
2 4 4 5 6 6
3 5 5 6 7 7
4 6 6 7 8 8
5 7 7 8 9 9
0 2 2 3 4 4
-1 3 1 4 3 5
-2 4 0 5 2 6
-3 5 -1 6 1 7
-4 6 -2 7 0 8
-5 7 -3 8 -1 9
                    1 0 0 0 0 0          Тест пройден
0 2 2 3 4 4
1 3 3 -4 5 5
2 4 -4 5 6 6
3 -5 5 6 7 -7
4 6 -6 -7 8 8
5 -7 7 -8 9 -9
0 2 2 3 4 4
-1 3 1 4 3 5
-2 4 0 5 2 6
-3 5 -1 6 1 7
-4 6 -2 7 0 8
-5 7 -3 8 -1 9
                   1 1 1 1 1 1          Тест пройден

Исходный код:

Код на Java

 

Описание:

Для решения данной задачи я решил ввести два счетчика, которые считают количество отрицательных чисел. Потом мы сравниваем счетчики каждого массива. Если в соответствующих строках данных массивов равное число отрицательных элементов, то и равное число неотрицательных.  В таком случае мы должны напечатать «1», в противном случае «0».

 Алгоритм:

  1. Создаем функцию для ввода данных.
    1. Создаем первый цикл для перебора строк.
    2. Создаем вложенный цикл для перебора каждого элемента массива и функцию ввода данных.
  2. Создаем главную функцию.
    1. Создаем цикл, перебирающий строки массивов.
    2. Создаем два счетчика.
    3. Создаем первый вложенный цикл, для перебора каждого элемента второго массива.
      • В случае обнаружения отрицательных элементов, увеличиваем счетчик.
    4. Создаем первый вложенный цикл, для перебора каждого элемента второго массива.
      • В случае обнаружения отрицательных элементов, увеличиваем счетчик.
    5. Объявляем условие вывода данных. Так как условие находится внутри главного цикла, то будет выведено по одному значению, которое характеризует каждую строку.
  3. Создаем функцию для печати результата.
    1. Один цикл для перебора каждого элемента одномерного массива.
  4. В функции «int main ()»:
    1. Вводим значения элементов первого массива.
    2. Вводим значения элементов второго массива.
    3. Применяем главную функцию к данным массивам.
    4. Печатаем результат.
    5. Окончание работы программы.

Ссылка на Ideone.

 Функция пересчета отрицательных элементов в заданной строке заданного массива.

Рабочий образец.

 

 

Ю2.25

87305Задача. На шахматной доске стоят черный король и белые ладья и слон (ладья бьет по горизонтали и вертикали, слон — по диагоналям). Проверить, есть ли угроза королю и если есть, то от кого именно. Учесть возможность защиты (например, ладья не бьет через слона).

[latex]x _{1}, y_{1}[/latex]- координаты слона.

[latex]x _{2}, y_{2}[/latex]- координаты ладьи.

[latex]x _{3}, y_{3}[/latex]- координаты короля.

Таблица:

[latex]x _{1} [/latex] [latex]y _{1} [/latex] [latex]x _{2} [/latex] [latex]y _{2} [/latex] [latex]x _{3} [/latex] [latex]y _{3} [/latex]  Предполагаемый результат  Комментарий
 1  1  2  2  4  4  Ладья перекрывает шаг от слона.  Тест пройден
 4  5  2  5  5  5  Слон перекрывает шаг от ладьи.  Тест пройден
 1  1  4  5  5  5  Короля атакует и слон и ладья.  Тест пройден
 5  1  4  5  5  5  Ладья атакует короля.  Тест пройден
 5  1  5  3  5  5  Ладья атакует короля.  Тест пройден
 3  1  4  2  5  3   Ладья перекрывает шаг от слона.  Тест пройден
 4  2  3  1  5  3  Слон объявляет шаг королю.  Тест пройден
 1  4  5  3  2  2  Короля не атакует никакая фигура.  Тест пройден

Исходный код программы:

Описание:

По условию задачи необходимо узнать атакуют ли фигуры короля. Для этого я использовал полный перебор всех возможных вариантов взаимодействия данных фигур.

Алгоритм:

  1.  Объявляем переменные и вводим их значения.
  2. Проверка условий.
    1. Проверка правильности ввода (не совпадают  координаты фигур).
    2. Проверка условия №1.  Проверяем, может ли короля хоть кто-то атаковать. Т. е. стоят ли ладья и король на одной горизонтальной или вертикальной линии или стоит ли король на одной диагонали со слоном.
    3. Проверка условия №2. Проверяем отдельно ладью. Если какая-то координата у ладьи и короля совпадает, то проверяем, находится ли слон между ними. Вывод результата.
    4. Проверка условия №1. Проверка слона, если король и слон расположены на одной диагонали, то проверяем, находится ли ладья между ними. Вывод результата.
  3. Окончание работы.

Ссылка на Ideone.

Ю 4.24

                                                    «Нарастающий итог»

Задача:

В массиве А[n] каждый элемент, кроме первого, заменить суммой всех предыдущих элементов.

 
Вводимые данные Предполагаемый вывод Комментарий
1 1 1 1 1 1 1 1 2 3 4 5 Тест пройден
1 2 3 4 5 6 7 8 9 1 1 3 6 10 15 21 28 36 Тест пройден
3 5 2 9 0 4 65 156 1 3 3 8 10 19 19 23 88 244 Тест пройден
2 -7 3 8 -4 5 -2 4 2 2 2 -5 -2 6 2 7 5 9 Тест пройден

Исходный код:

 Описание:

Постейшие операции с массивом. С помощью цикла записываем данные в массив, после чего, снова с помощью цикла, записываем новые данные во второй массив. Далее выводим результат.

Алгоритм:

  1. Объявление переменной и ввод размерности массива.
  2. Создание массива.
  3. Создание цикла, для записи вводимых данных в массив.
  4. Создание нового  массива.
  5. Создание цикла, для ввода обработанных данных в новый массив.
  6. Создание цикла, для вывода результата.
  7. Окончания работы программы.

Ссылка на Ideone.

Другой вариант:

Вариант без использования второго массива. Если действовать в лоб (последовательно менять значения элементов от первого до последнего на сумму предыдущих) можно получить различные геометрические прогрессии и даже, в некоторых случаях, последовательность Фибаначчи(так как мы меняем предшествующие элементы, и, при обычном подходе нет эффективного способа их запоминать). Подумав некоторое время над этой  проблемой, и осознав бесперспективность своих действий, решил зайти с другой стороны. Да, я не могу менять элементы в начале массива, но я могу менять их в конце, т. к. они не влияют на вычисления. Для этого пришлось создать новый цикл, в котором мы находим сумму всех элементов массива кроме последнего, величина которого (массива) уменьшается с каждым шагом. Далее, в главном цикле, мы последовательно присваиваем элементам массива найденные суммы. И уже после цикла присваиваем нулевому элементу значение первого.

A119(a)

Задача:

Вычислить бесконечную сумму с заданной точностью [latex]\varepsilon \left(\varepsilon > 0\right)[/latex]. Считать что требуемая точность достигнута, если несколько первых слагаемых и очередное слагаемое оказалось по модулю меньше, чем ε, это и все последующие слагаемые можно уже не учитывать.

  1. [latex]\sum{\frac{1}{i^2}} [/latex]
 
[latex]\varepsilon[/latex] Result Комментарий
0.0000000000000045 1.644912487 Тест пройден
0.45 1.25 Тест пройден
0 Попробуйте… Тест пройден
>1 1 Тест пройден

Описание:

В задаче сказано посчитать сумму членов определенной последовательности с заданной точностью.

Алгоритм:

  1. Объявление переменных, необходимых для обозначения члена последовательности, суммы членов последовательности и точности с которой будут проходить вычисления.
  2. Ввод значения точности.
  3. Проверка правильности ввода:
    • Отрицательное или равное нулю [latex]\varepsilon[/latex] вызовет бесконечный цикл и как следствие — превышение лимита по времени.
  4. Создание заведомо бесконечного цикла, который прерывается, как только член последовательности станет меньше, чем заданная точность.
  5. Вывод результата и окончание работы.

Ссылка на Ideone.

Ю3.8

«Отскоки»

Задача: Материальная точка бросается на горизонтальную плоскость со скоростью [latex]V[/latex] и под углом [latex]\alpha[/latex] к ней ( плоскости ). При каждом ударе о плоскость, кинетическая энергия точи уменьшается в [latex]\beta[/latex] раз. Найти абсциссы первых [latex]n[/latex] точек касания. Сопротивлением воздуха пренебречь.

По умолчанию примем количество интересующих нас отскоков равным 3.

[latex]V[/latex](speed)[latex]m/c[/latex] [latex]\alpha[/latex](corner)  [latex]\beta[/latex] Первая координата Вторая координата Третья координата Комментарий
10 15 2 5.09858 7.64787 8.92252 Тест пройден
8 30 4 5.65184 7.06480 7.41804 Тест пройден
27 45 3 74.3373 99.1164 107.376 Тест пройден
17 35 3 27.6926 36.9234 40.0004 Тест пройден
13 0 5 0.00000 0.00000 0.00000 Тест пройден

Замечание:

По неизвестной мне причине (думаю на погрешность округления) [latex]sin( \pi)[/latex] при вычислениях равен 1.24879e-15.

Исходный код:

Для решения задачи необходимо вспомнить уроки физики в начале десятого класса, а именно главу о движении под углом к горизонту. Воспользуемся формулой расстояния полета материальной точки [latex]S=\frac{V^2sin(2\alpha) }{g}[/latex] . По условию задачи сказано, что кинетическая энергия уменьшается при каждом отскоке в [latex]\beta[/latex] раз. Если рассмотреть формулу кинетической энергии: [latex]E_{k}=\frac{ mV^2 }{2}[/latex]- можно заметить, что [latex] m[/latex] (масса) является константой, значит изменяться может только [latex]V^2[/latex] (скорость тела в квадрате). Если условится, что материальная точка начинает движение в начале координат, то координата первого отскока будет равна [latex]S[/latex], второй — [latex]S+S_{1}[/latex], третьей — [latex]S+S_{1}+S_{2}[/latex], n-ой — [latex]S+…+S_{n-1}[/latex].

Алгоритм:

  1. Объявление переменных и константы(ускорение свободного падения).
  2. Вывод поясняющей информации.
  3. Ввод значений переменных.
  4. Проверка недопустимых ситуаций:
    • Проверка угла: значения угла выше 90 градусов или отрицательное значение противоречат условию задачи.
    • Проверка скорости: отрицательное значение будет означать движение в противоположную интересующей нас сторону.
    • Проверка коэффициента уменьшения кинетической энергии: это число должно быть хотя бы положительным.
    • Проверка числа интересующих нас отскоков: это должно быть натуральное число.
  5. Вычисление вспомогательных величин (двойной угол, скорость в квадрате).
  6. Создание вычислительного цикла.
    • Вывод значений.
  7. Окончание работы.

 Ссылка на Ideone.

А54

Задача:

Даны действительные числа [latex]x_{1}[/latex], [latex]x_{2}[/latex], [latex]x_{3}[/latex], [latex]y_{1}[/latex],[latex]y_{2}[/latex], [latex]y_{3}[/latex].

Принадлежит ли начало координат треугольнику с вершинами [latex]\left( x_{1} ; y_{1} \right) [/latex], [latex]\left( x_{2} ; y_{2} \right) [/latex], [latex]\left( x_{3} ; y_{3} \right) [/latex]?

 
  [latex] x_{1} [/latex]   [latex] y_{1} [/latex]   [latex] x_{2} [/latex] [latex] y_{2} [/latex]   [latex] x_{3} [/latex]   [latex] y_{3} [/latex] Предполагаемый результат Вывод
 -400  0  240  1  210  1  Не принадлежит  Тест пройден
 -400  0  240  1  210  -1  Принадлежит  Тест пройден
 0  0  240  -1  2100  -1  Принадлежит  Тест пройден
 -2  -2  5  -2  1  10  Принадлежит  Тест пройден
 3  0  40  0  15  10  Не принадлежит  Тест пройден
 -24  -2  29  -2  29  10  Принадлежит Тест пройден
 -12  -5  14  -5  7  -5  Жаль вас расстраивать… Тест пройден

 

 

Описание:

Для решения задачи использовал общее уравнение прямой. Последовательно сравнивая расположение вершин треугольника относительно противоположных им сторон с расположением начала координат относительно тех же сторон, можно определить, находится ли точка внутри треугольника.

 

Краткий алгоритм:

  1. Объявление переменных, обозначающих координаты вершин  треугольника.
  2. Ввод координат вершин треугольника.
  3. Небольшая проверка  правильности ввода.
  4. С помощью общего уравнения прямой [latex]\frac{y-y_{1}}{y_{2}-y_{1}}=\frac{x-x_{1}}{x_{2}-x_{1}}[/latex], приведенного в вид :[latex]\left(y_{2}-y_{1} \right) \left(x-x_{1}\right)-\left(y-y_{1} \right) \left(x_{2}-x_{1}\right)=0[/latex],- определяем расположение вершин треугольника относительно противоположных им сторон (название переменной показывает, какую вершину проверяют), а также начала координат относительно тех же сторон, после чего следует умножение соответствующих величин. В случае, если произведение больше, либо равно нулю во всех трех случаях, можно сделать вывод о том, что точка находится внутри треугольника.
  5. Вывод вердикта и окончание работы.

Ссылка на Ideone.

Ю1.23

Задача

Треугольник  задается координатами своих вершин на плоскости: [latex]A\left(x_{1};y_{1} \right)[/latex], [latex] B\left(x_{2};y_{2} \right)[/latex], [latex] C\left(x_{3};y_{3} \right)[/latex].
Найти сумму длин медиан данного треугольника.

Тесты:

[latex]x_{1}[/latex] [latex]y_{1}[/latex] [latex]x_{2}[/latex] [latex]y_{2}[/latex] [latex]x_{3}[/latex] [latex]y_{3}[/latex] Результат Прохождение теста
0 4 0 7 0 2 Не является треугольником… Пройден
51 0 97 0 68 0 Не является треугольником… Пройден
1 7 3 13 6 22 Не является треугольником… Пройден
0 3 0 0 4 0 10.3775 Пройден
0 0 1 1.7320 2 0 5.1960 Пройден

Исходный код программы:

Алгоритм:

  1. Вводим переменные;
  2. Вводим координаты точек [latex]A[/latex], [latex]B[/latex], [latex]C[/latex];
  3. Используем условный оператор для выделения частного случая.
    • Если точки будут лежать на одной прямой, то медиан, как и самого треугольника не может быть в принципе. Для проверки  используем уравнение прямой, проходящей через две несовпадающие точки: [latex]\frac{y-y_{1}}{y_{2}-y_{1}}=\frac{x-x_{1}}{x_{2}-x_{1}}[/latex]. С помощью эквивалентных преобразований получаем формулу:[latex]\left(y_{2}-y_{1} \right) \left(x-x_{1}\right)-\left(y-y_{1} \right) \left(x_{2}-x_{1}\right)=0[/latex] c помощью которой (подставив вместо [latex]x[/latex] и [latex]y[/latex]  [latex]x_{3}[/latex] и [latex]y_{3}[/latex] соответственно) сможем определить, находятся ли данные точки на одной прямой).
    • В случае, если точки не находятся на одной прямой, находим длины  отрезков соединяющих середины сторон с противоположными им вершинами(эти отрезки и являются медианами); (Координаты середин отрезков находим по формулам: [latex]\frac{\left(x_{1}+x_{2} \right)}{2}[/latex], [latex]\frac{\left(y_{1}+y_{2} \right)}{2}[/latex], где [latex]\left(x_{1};y_{1} \right)[/latex] и [latex]\left(x_{2};y_{2} \right)[/latex] — координаты концов отрезка, середину которого мы находим. Длину медианы находим по формуле: [latex]AB=\sqrt{\left(x_{1}-x_{2} \right)^{2}+\left(y_{1}-y_{2} \right)^{2}}[/latex] , где  [latex]\left(x_{1};y_{1} \right)[/latex] и [latex]\left(x_{2};y_{2} \right)[/latex] — координаты точек [latex]A[/latex] и [latex]B[/latex] соответственно).
  4. Находим сумму длин этих отрезков. (Простое сложение).