e-olimp 4650. Граф-Турнир

Задача на e-olimp

Оригинал решения 

Тесты на Try Haxe!

Постановка задачи:

Построить на [latex]n[/latex] вершинах турнир, расстояние между любой парой вершин в котором не превышает двух рёбер.

Алгоритм решения:

Условию удовлетворяет любая тройка вершин, принадлежащих циклу длины три, следовательно, искомый граф сильно связен. Уместно взять за основу полный неориентированный граф [latex]K_n[/latex] (не ограничивая общности рассуждений, будем представлять граф на плоскости как правильный n-угольник) и задать на нём ориентацию рёбер согласно набору правил:

Контур графа (рёбра вида [latex](k,k+1)[/latex]) ориентирован по часовой стрелке.
В дальнейших построениях будем отталкиваться от контура: каждая вершина графа должна находиться в хотя бы в одном цикле длины три с данной. Опишем процедуру построения такого орграфа: начиная с вершины под номером 1 будем просматривать все остальные вершины. Если на некотором шаге ребро, связывающее вершины, не ориентировано, то ориентируем его образом, противоположным ориентации ребра, соединяющего текущую вершину-исток и предыдущую по номеру вершину в обходе. Более конструктивно процедура формулируется так: обойти все вершины в порядке их следования в контуре. Пусть номер стартовой вершины для исходной итерации — [latex]V_i[/latex], рассматриваемой на данном шаге — [latex]V_k[/latex] Если ребро [latex](V_i,V_k)[/latex] не ориентировано, и номера обеих вершин (не)чётны — задать ориентацию [latex][V_i,V_k][/latex], иначе — [latex][V_k,V_i][/latex].

Исключение — граф [latex]K_4[/latex]: степень каждой вершины равна трём, следовательно, одно ребро каждой вершины не принадлежит контуру. Но таких рёбер всего два, следовательно, невозможно задать чередование ориентаций рёбер и получить четыре цикла длины 3. Для всех графов на большем числе вершин построение всегда возможно.

Реализация:

Для решения задачи достаточно хранить граф в форме матрицы смежности.

Тесты:

n = 5 \begin{pmatrix}0 & 1 & 1&0&0 \\0 & 0 & 1&1&0 \\0 & 0 &0&1&1\\1 & 0& 0&0&1\\1 & 1 & 0&0&0\end{pmatrix}
n = 3 \begin{pmatrix}0 & 1 & 0 \\0 & 0 & 1 \\1 & 0 & 0 \end{pmatrix}

Код:

А400

Задача. Дана действительная квадратная матрица порядка [latex]n[/latex]. Получить [latex]x_{1}x_{n} + x_{2}x_{n-1}+ \cdots + x_{n}x_{1}  [/latex], где[latex] x_k[/latex] — наибольшее значение элементов [latex]k[/latex]-й строки данной матрицы.

Суть задачи. Происходит заполнение многомерного массива. После этого в силу коммутативности умножения первая сумма полностью совпадает с последней, вторая — с предпоследней и т.д. Т.е. все слагаемые берутся дважды, кроме середины для нечётного [latex]n[/latex]. Это означает, что каждый максимум при вычислении суммы потребуется ровно один раз и никакой массив максимумов не нужен.

Оригинал решения

Решение на Try Haxe!

Тесты

[latex]n[/latex] Элементы Результат
2 1 2 3 4 16
3 1 2 3
4 5 6
7 8 9
1146

Код

e-olymp 905. Какой треугольник?

Задача e-olymp 905
Задача Тест на tryHaxe

Постановка задачи

Определить вид треугольника (равносторонний, равнобедренный, разносторонний) по заданным длинам его сторон. Существование треугольника и корректность исходных данных гарантируется. Технические условия Входные данные В единственной строке задано 3 целых числа — длины сторон треугольника. Длины сторон не превышают 100. Выходные данные В единственной строке вывести 1, если треугольник равносторонний, 2 если равнобедренный и 3 если разносторонний.

Тесты:

Входные данные Результат
5 5 5 1
1 2 2 2
3 4 5 3
3 5 5 такого треугольника не существует

e-olymp 506. Новый компилятор

Задача e-olymp 506.

Оригинальное решение.

Решение на Try Haxe!

Задача. Вам необходимо преобразовать множество старых программ для новой версии компилятора. Для этого необходимо заменить «->» на «.» везде, кроме комментариев. Комментарии в данном языке программирования начинаются с символов «//» и продолжаются до конца строки. Напишите программу, выполняющую такое преобразование.

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

Входной файл содержит от 1 до 500 строк длиной не более 50 символов с ASCII-кодами от 32 до 127 – текст программы, которую нужно преобразовать.

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

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

Тесты:

Входные данные Результат
test program —> int main(); test program -. int main();
coments write like // not -> coments write like // not ->
coment you can wtite -> // not -> \\ coment you can wtite . // not -> \\

Код

Ю4.21

Задача.

Целочисленный массив [latex] K(n, n) [/latex]  заполнить нулями и единицами, расположив их в шахматном порядке.

Решение.

В цикле проверяем если сумма номеров элемента в массиве чётна, то значению элемента массива присваиваем  единицу, в противном случае присваиваем  ноль.

Тесты:

n = 4 \begin{pmatrix}0 & 1 & 0&1 \\1 & 0 & 1&0 \\0 & 1 & 0&1 \\1 & 0& 1&0\end{pmatrix}
n = 2 \begin{pmatrix}
0 & 1  \\
1 & 0
\end{pmatrix}

 

Задача взята с источник

А137а

Задача:

Даны натуральное число n и действительные числа [latex] a_1, \cdots ,a_n [/latex]

Вычислить:

[latex] a_1, a_1 + a_2, \cdots, a_1 + a_2 + \cdots + a_n [/latex]

Решение:

Для подсчёта суммы в данной задаче надо было организовать цикл for (поскольку указано количество элементов в ряду), и с каждой итерацией прибавлять к результату result (которому предварительно придано значение 0) введённое с клавиатуры значение, потом выводить результат на экран.

Тесты:

Кол-во элементов [latex] a_1, \cdots ,a_n [/latex] Результат
7 1, 2, 3, 4, 5, 6, 7 1, 3, 6, 10, 15, 21, 28
10 10, 12, 14, 16, 18, 20, 21, 23, 25, 27 10, 22, 36, 52, 70, 90, 111, 134, 159, 186
5 0.1, 0.2, 0.3, 0.4, 0.5 0.1, 0.3, 0.6, 1.0, 1.5

Тест на tryHaxe
Задача взята с источника

e-olymp 60. Площадь многоугольника

Задача e-olymp 60.
Тест на tryHaxe.

Условие задачи

Заданы координаты [latex] n [/latex] последовательных вершин многоугольника. Определить его площадь.

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

Первая строка содержит количество вершин многоугольника [latex] n [/latex]. В следующих [latex] n [/latex] строках через пробел заданы целочисленные координаты его последовательных вершин [latex] x_i, y_i. [/latex] Известно, что [latex] 3≤n≤1000,−1000≤x[i],y[i]≤1000.[/latex]

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

Площадь многоугольника [latex] S [/latex].

Тесты

Входные данные Выходные данные
3, (0, 0), (0, 2), (2, 0) 2
4, (-1000, 500), (-500, 1000), (2, 10), (35, 60) 339865
5, (13, -92), (44, 0), (-800, 30), (27, 2), (1, 2) 1446.000

Для подсчёта площади необходима специальная формула которую можно найти тут а так же некоторое её обоснование.

ML5

Оригинал задачи тут
Тесты задачи на TryHaxe

Условие:

Даны два действительных числа. Найти среднее арифметическое этих чисел и среднее геометрическое их модулей.

Алгоритм решения:

Нам необходимо найти среднее арифметическое чисел, которое представляет собой сумму всех зафиксированных значений, делённую на их количество. Для нашей задачи формула приобретает следующий вид: [latex] A = \frac{a+b}{2}.[/latex]
Для нахождения среднего геометрического модулей двух чисел воспользуемся формулой [latex] G = \sqrt{|a×b|}.[/latex]

 

Тесты:

Первое число Второе число Среднее арифметическое Среднее геометрическое
3 9 6 5.19615
156 82 119 113.102
-544.59 -12 -278.295 80.8398

e-olymp 918. Какая четверть?

Задача e-olymp 918
Тесты задачи на TryHaxe

Задача

Задана точка с координатами x и y. Определить, в какой координатной четверти она расположена.

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

В единственной строке через пробел заданы 2 вещественных числа — координаты точки, значения координат по модулю не превышают 100.

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

Единственное число — номер соответствующей четверти, либо 0, если однозначно определить четверть невозможно.

Тесты:

[latex] x [/latex] [latex] y [/latex] Четверть
2 -2 4
8 10 1
-3 5 2
-3 -9 3

Сначала мы проверяем, не равна ли хотя бы одна переменная нулю. Если да — выводим 0, если нет — проверяем, больше ли [latex] x [/latex] нуля. Если да — это будет первая или четвертая четверть, если нет — вторая или третья. Если [latex] y [/latex] больше нуля — это первая или вторая четверть, если меньше — вторая или третья.

2.1.4 Type Bool

2.1.4 Bool учебник по Haxe 3.

Bool — базовый тип, представляющий собой значение типа true или false.

Значения типа Bool обычно используют в условиях if и while.
Значения типа Bool могут возвращать такие операторы как:

  • && (и)
  • || (или)
  • ! (не).

Haxe гарантирует что сложные логические выражения вычисляются слева направо и при том только при необходимости в момент выполнения. Например, для выражения типа А && B программа первое что проверит это верно ли А,  и проверит В только в том случае если проверка для А верна. Для выражения А || B не будет вычисляться В если  А == true поскольку значение В уже не будет иметь значения. Это важно в таких случаях как например это:

if (object != null && object.field == 1) { . . . }

В этом случае, доступ в object.field приведет к ошибке во время исполнения, если поле object пусто, то есть null, но проверка object != null защитит от этой ошибки.  Другой пример:

В этом случае на выходе будет true. При этом если a > 0 && b < 0, то будет выведена строка «false».

Ссылка на Try Haxe!