e-olymp 916. Интересное произведение

Ссылка на оригинальную статью
Ссылка на e-olymp.com.

Задача
Определить все возможные значения произведения $i·j$, если целочисленные значения переменных $i$ и $j$ меняются соответственно $i$ от $a$ до $b$ и $j$ от $c$ до $d (1 ≤ a, b, c, d ≤ 10)$.

Входные данные
В одной строке заданы $4$ числа $a, b, c$ и $d$ ($a$ может быть больше $b$, $c$ может быть больше $d$).

Выходные данные
Вывести количество возможных вариантов произведения.

Тесты

Входные данные Выходные данные
1 1 10 1 10 42
2 5 7 4 3 6
3 6 3 8 4 16
4 2 8 4 1 19

Код

Решение
Для начала присваивается $a$ и $c$ минимальные значения из пары, а $b$ и $d$ — максимальные. Переменной $p$ присваивается произведение минимальных значений, а $i$ присваивается минимальное значение из первой пары. Далее в цикле проверяется делится ли число $p$, которое находится в диапазоне от произведения минимальных значений до произведения максимальных, на $i$ и $j$. Если условие выполняется, то временной переменной присваивается единица, а счетчик (результат) увеличивается на $1$.

e-olymp 974. Флойд-1

Ссылка на оригинальную статью.

Условие:

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

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

В первой строке записано количество вершин графа [latex]n (1 ≤ n ≤ 100)[/latex]. В следующих [latex]n[/latex] строках записано по [latex]n[/latex] чисел — матрица смежности графа ([latex]j[/latex]-ое число в [latex]i[/latex]-ой строке соответствует весу ребра из вершины [latex]i[/latex] в вершину [latex]j[/latex]). Все числа по модулю не превышают [latex]100[/latex]. На главной диагонали матрицы — всегда нули.

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

Выведите [latex]n[/latex] строк по [latex]n[/latex] чисел — матрицу кратчайших расстояний между парами вершин. [latex]j[/latex]-ое число в [latex]i[/latex]-ой строке должно равняться весу кратчайшего пути из вершины [latex]i[/latex] в вершину [latex]j[/latex].

Решение:

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

Тесты:

Input Output
4
0 5 9 100
100 0 2 8
100 100 0 7
4 100 100 0
0 5 7 13

12 0 2 8

11 16 0 7

4 9 11 0

Код программы:

 

e-olymp 1872. Снеговики

Ссылка на оригинальную статью.

Задача:

Зима. 2012 год. На фоне грядущего Апокалипсиса и конца света незамеченной прошла новость об очередном прорыве в областях клонирования и снеговиков: клонирования снеговиков. Вы конечно знаете, но мы вам напомним, что снеговик состоит из нуля или более вертикально поставленных друг на друга шаров, а клонирование — это процесс создания идентичной копии (клона).

В местечке Местячково учитель Андрей Сергеевич Учитель купил через интернет-магазин «Интернет-магазин аппаратов клонирования» аппарат для клонирования снеговиков. Теперь дети могут играть и даже играют во дворе в следующую игру. Время от времени один из них выбирает понравившегося снеговика, клонирует его и:

  • либо добавляет ему сверху один шар;
  • либо удаляет из него верхний шар (если снеговик не пустой).

Учитель Андрей Сергеевич Учитель записал последовательность действий и теперь хочет узнать суммарную массу всех построенных снеговиков.

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

Первая строка содержит количество действий [latex] n (1 ≤ n ≤ 200000).[/latex] В строке номер [latex]i+1[/latex]содержится описание действия:

  • [latex]t[/latex] [latex]m[/latex]— клонировать снеговика номер [latex] t (0 ≤ t < i) [/latex] и добавить сверху шар массой [latex]m (0 < m ≤ 1000)[/latex];
  • [latex]t[/latex] [latex]0[/latex] — клонировать снеговика номер [latex]t (0 ≤ t < i)[/latex] и удалить верхний шар. Гарантируется, что снеговик не пустой.

В результате действия [latex]i[/latex], описанного в строке [latex]i+1 [/latex] создается снеговик номер [latex]i [/latex]. Изначально имеется пустой снеговик с номером ноль.

Все числа во входном файле целые.

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

Выведите суммарную массу построенных снеговиков.

Решение: 

Считываем [latex]n[/latex] — количество действий. Задаем двухмерный массив размером [latex] [n+1][2] [/latex]. Указываем значение первого элемента равное [latex]0 [/latex] и нулевого элемента равного [latex]-1 [/latex], чтобы он ни на что не ссылался в начале.  В цикле считываем номер снеговика, которого нужно клонировать и массу шара, которую нужно добавить. Если масса шара равна [latex]0 [/latex], то мы клонируем снеговика и убираем последний его шар, ссылаясь на снеговика в котором этого шара еще не было. Если же масса шара не равно [latex]0[/latex], то мы клонируем снеговика и добавляем ему шар массой [latex]m [/latex]. Во второй ячейке указываем предка с которого строится новый снеговик. Выводим общую массу снеговиков.

Тесты:

Input Output
8
0 1
1 5
2 4
3 2
4 3
5 0
6 6
1 0
74
4
0 3
1 2
2 1
1 1
18

 

Код программы:

a406

Задача. С помощью [latex]x_{ij}, i=1,2; j=1,…,n[/latex] — действительной матрицы на плоскости задано [latex]n[/latex] точек так, что [latex]x_{1j},x_{2j} [/latex] — координаты [latex]j [/latex]— точки. Точки попарно соединены отрезками. Найти длину наибольшего отрезка.

Тест

n Матрица [latex]x_{ij}, i=1,2[/latex] Длина наибольшего отрезка  Комментарий
3 2 8 4

9 1 5

10 Пройдено
4 6 14 2 1

9 3 8 0

13.3417 Пройдено
5 1 8 4 3 7

2 9 5 0 11

11.7047 Пройдено

 

Код программы

Ход решения:

  1. Вводим матрицу построчно (не очень удобно).
  2. Находим длину наибольшего отрезка.
    С помощью вложенных циклов мы находим длины всех отрезков по формуле
    AB=(x2−x1)2+(y2−y1)2,A(x1,y1),B(x2,y2).
  3. По алгоритму нахождения максимума находим длину наибольшего отрезка.
  4. Выводим матрицу.
  5. Выводим длину наибольшего отрезка.

Пример выполнения

А694а

Ссылка на оригинальную статью

Ссылка на Try Haxe!

Задача
Получить квадратную матрицу порядка [latex]n[/latex] [latex]\begin{pmatrix}1 &0 &\cdots & 0 \\ 0 & 1 &\cdots &0 \\ \cdots &\cdots &\cdots \cdots & \cdots \\ 0 & 0 & \cdots & 1\end{pmatrix}[/latex]

Тесты

n Матрица
2 [latex]\begin{pmatrix}1 & 0 \\ 0 & 1 \end{pmatrix}[/latex]
4 [latex]\begin{pmatrix}1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}[/latex]

Код

Решение
Из входного потока считываем $n$ — размер матрицы. Создаем матрицу со значением ноль по умолчанию. Затем в цикле заполняем главную диагональ единицами.

e-olymp 5072. Подсчет количества ребер

Задача

Ориентированный граф задан матрицей смежности.
Найдите количество ребер в графе.

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

Входной файл содержит число n (1n 100) — число вершин в графе, и затем n строк по n чисел, каждое из которых равно 0 или 1 — его матрицу смежности.

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

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

Решение

30 1 11 0 1

0 1 1

6
50 1 1 1 11 0 0 0 0

1 0 0 0 0

0 0 1 0 1

1 0 0 0 0

9
21 11 1 4

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

Количество ребер ориентированного графа равно количеству единиц в его матрице смежности. Поэтому просто считываем, суммируем найденные 1-цы, и выводим ответ.

Выполнение кода на Try Haxe !
Решение задачи на С++.

e-olymp 127. Баксы в банке

Ссылка на оригинальную статью
Ссылка на e-olymp
Ссылка на Try Haxe!

Задача
Папа Карло подарил Буратино 1 доллар в его первый день рождения, а экономный Буратино сложил подарок в банку. Каждый последующий год папа Карло удваивал свой предыдущий подарок и прибавлял к нему столько долларов, сколько лет исполнилось Буратино, а тот в свою очередь продолжал складывать баксы в банку. На какой $N$-й день рождения в банке будет не менее, чем $S$ долларов?

Входные данные
Единственное число — значение $S$ ([latex]1 \le S \le 240[/latex]).

Выходные данные
Искомое значение $N$.

Тесты

Входные данные Выходные данные
15 3
25 4
9 3
99 5
199 6
333 7

Код

Решение
В данной задаче $sum$ — сколько долларов в банке, $p$ — сколько долларов Папа Карло подарил Буратино. Пока $s > sum$ мы инкрементируем $n$ и считаем сколько Папа Карло подарит Буратино $p = p * 2 + n$ и суммируем его с тем что лежит в банке — $sum += p$. После этого в выходной поток подаётся $n$.

A155

Ссылка на оригинальную статью.

Ссылка на решение задачи на сайте Try Haxe!

Условие:

Даны натуральное число [latex]n [/latex] и действительные числа [latex] x_{1},\ldots, x_{n} [/latex] [latex](n\geq 2)[/latex]

Вычислить:

[latex]\left(\left(\frac{1}{|x_{1}|+1}+x_{2} \right)\left(\frac{1}{|x_{2}|+1}+x_{3} \right)\cdots\left(\frac{1}{|x_{n-1}|+1}+x_{n} \right)\right)[/latex]

Тесты

Ввод Вывод
$n$ $x_1, \ldots, x_n$ $k$
2 1 1 1.5
3 0.5 1 2 4.16667
3 -0.3 1 -0.5 0

Решение:

Задаем переменные [latex]n,x,k[/latex]. В цикле умножаем переменную [latex]k[/latex] каждый раз на [latex]\left(\left(\frac{1}{|x_{n-1}|+1}+x_{n} \right)\right)[/latex]. После выводим значение [latex]k[/latex].

Код программы:

Ю4.35

Ссылка на оригинальную статью.

Условие:

Совместная работа. Известно время [latex]t_{1},t_{2}, \cdots,t_{n}[/latex], за которое некоторую работу может выполнить каждый из [latex]n[/latex] рабочих бригады, работая в одиночку. Сколько времени понадобится бригаде на выполнение этой работы, если они будут работать совместно (и при этом никто из них не «сачкует»)

Тесты

Количество рабочих n. Время t каждого рабочего, требуемое для выполнения некоторой работы.  Время совместной работы.
3 2 4 5 1.1
4 5 7 9 4 1.4
5 2 4 5 1 2 0.4
7 8 6 5 6 6 7 2 0.7

Решение:

В программе используются два цикла. Первый– для ввода времени каждого рабочего, а второй– для вычисления общей производительности рабочих. Call–callaboration (время совместной работы), sum – общая производительность рабочих.В данной задаче нам нужно найти время, за которое [latex]n[/latex] рабочих выполнят какую-то совместную работу. В задаче не указан  общий объём выполняемой работы, по-этому зададим его как 1. Время совместной работы находят по формуле: [latex]t_{call}=\frac{V}{\frac{V}{t_{1}}+\frac{V}{t_{2}}+\cdots+\frac{V}{t_{n}}}[/latex], где [latex]V[/latex] –  общий объём выполняемой работы, т.е – 1. Т.к в задаче не указана единица измерения времени, будем считать все в часах.

Код программы:

 

 

Ю 4.24

Ссылка оригинальную статью

Ссылка Try Haxe!

 

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

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

Тесты:

Ввод Вывод
1 1 1 1 1 1 1 1 2 3 4 5
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

Код:

Ход решения:

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