e-olymp 2164. Шифр Юлия

Задача

Юлий Цезарь использовал свой способ шифрования текста. Каждая буква заменялась на следующую по алфавиту через $k$ позиций по кругу. Необходимо по заданной шифровке определить исходный текст.

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

В первой строке дана шифровка, состоящая из не более чем $255$ заглавных латинских букв. Во второй строке число $k \left ( 1 \leq k \leq 10 \right ).$

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

Вывести результат расшифровки.

Тесты

Входные данные Выходные данные
$XPSE \\ 1$ $WORD$
$ZABC \\ 3$ $WXYZ$
$WURYAD \\ 4$ $SQNUWZ$

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

Решение

Для решения задачи вводим строки $str$ и $str1$ и преобразуем их в массив символов $(char)$. Чтобы расшифровать слово, находящееся в строке
$s$, необходимо заменить каждую букву данной строки на букву, находящуюся на $(find — k)$ позиции строки $s1$, где $s1$ — строка, содержащая латинский алфавит, а $find$ — позиция заменяемой буквы в алфавите. В случае если разница $find$ и $k$ меньше нуля, заменяем букву строки $s$ на букву, находящуюся на $(26 — (k — find))$ позиции строки $s1$, то есть, не считая то количество позиций, которые уже были пройдены от изначального символа до первого символа строки $s1$. Можно не беспокоиться о том, что символ вернется к концу алфавита более, чем один раз так как условие исключает этот вариант ($ k \leq 10$ при 26-ти символах латинского алфавита).

Ссылки

Условие задачи на e-olymp

Код решения задачи ideone

e-olymp 263. Три единицы

Задача

Вычислить количество последовательностей длины $n,$ состоящих только из нулей и единиц, в которых не встречается три единицы подряд.

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

Длина последовательностей $n$ $\left ( 1 \leq n \leq 10^{5} \right ).$

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

Вывести количество искомых последовательностей по модулю $12345.$

Тесты

Входные данные Выходные данные
$1$ $2$
$4$ $0$
$263$ $10159$
$10000$ $8872$

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

Решение

Объявим массив $f,$ в котором будем сохранять значения $f(1), f(2),\dots, f(n).$ Далее читаем входные данные и заносим в соответствующие ячейки массива $f$ значения $f(1), f(2)$ и $f(3).$ Вычисляем значения $f(i)$ по рекуррентной формуле $f(n) = f(n – 1) + f(n – 2) + f(n – 3).$
Эту формулу получили так: сперва обозначили через $f(n)$ количество искомых последовательностей из $0$ и $1$ длины $n.$ Далее мы смотрим, если на первом месте последовательности будет находиться $0,$ то начиная со второго места можно построить $f(n – 1)$ последовательность. Если на первом месте стоит $1,$ то на втором месте возможны оба варианта. Если там стоит $0,$ то на следующих $n – 2 $свободных местах можно построить $f(n – 2)$ последовательности. Если $1,$ то на третьем месте обязательно должен находиться $0$ и начиная с четвертого места можно построить $f(n – 3)$ последовательности.
Вычисления значения $f(i)$ производим по модулю $12345.$ В результате выводим количество искомых последовательностей по модулю.

Ссылки

Условие задачи на e-olymp

Код решения задачи ideone

e-olymp 5080. Количество висячих вершин 1

Задача

Дан простой неориентированный невзвешенный граф. Подсчитать количество висячих вершин в нем. Вершина называется висячей, если ее степень равна $1.$

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

В первой строке находится число $n$ $\left ( 1 \leq n \leq 1000 \right ).$ В следующих $n$ строках находится матрица смежности.

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

Выведите количество висячих вершин в графе.

Тесты

Входные данные Выходные данные
$2 \\ 0 \ 1 \\ 1 \ 0$ $2$
$3 \\ 0 \ 1 \ 1 \\ 1 \ 0 \ 1 \\ 1 \ 1 \ 0$ $0$
$4 \\ 1 \ 0 \ 0 \ 0 \\ 0 \ 1 \ 0 \ 0 \\ 0 \ 0 \ 1 \ 0 \\ 0 \ 0 \ 0 \ 1$ $4$
$3 \\ 0 \ 1 \ 1 \\ 1 \ 0 \ 1 \\ 1 \ 0 \ 0$ $1$

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

Решение

Введем обозначения: $gr$ – имя массива(матрицы смежности), $n$ – количество вершин, $cnt$ – счётчик.
Просматривая матрицу смежности, подсчитываем количество единиц, т.е количество инцидентных вершин данной вершине. Инцидентные вершины — вершины, которые соединены ребром. Степенью вершины называется количество рёбер, инцидентных этой вершине. Висячей вершиной называют вершину, степень которой равна 1. Соответственно, если в каком-либо ряду в матрице только одна единица, то вершина имеет степень 1 и является висячей.
Сперва предположим, что что граф не имеет висячих вершин, далее введём матрицу смежности, подсчитаем степень вершины и проверим, является ли вершина висячей. В ответе выводим количество висячих вершин в графе.

Ссылки

Условие задачи на e-olymp

Код решения задачи ideone

e-olymp 1611. Реверс подстроки

Задача

Дана строка $s$, в которой выделили подстроку, состоящую из символов с $i$-го по $j$-ый включительно (символы строки $s$ нумеруются с единицы) и поменяли местами $i$-ый символ с $j$-ым и так далее (конвертировали подстроку). Выведите строку $s$ после внесенных изменений.

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

В первой строке содержится строка $s$ длиной не более $1000$ символов, во второй — два числа $i$ и $j$ $\left ( i \leq j \right ).$

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

Выведите строку $s$ после внесенных изменений.

Тесты

Входные данные Выходные данные
$zbbg \\ 2 \ 3$ $zbbg$
$gaqipkajibk \\ 5 \ 6$ $gaqikpajibk$
$helloworld \\ 5 \ 7$ $helloworld$
$eolymp1611 \\ 7 \ 8$ $eolymp6111$

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

Решение

Для решения задачи вводим строку $str$ и преобразуем её в массив символов $(char)$. Далее в цикле конвертируем подстроку и выводим строку $s$ после внесенных изменений.

Ссылки

Условие задачи на e-olymp

Код решения задачи ideone

e-olymp 2667. Змейка

Задача

Напишите программу, которая выводит элемент из строки $x$ и столбца $y$ матрицы размера $n \times m$, которая заполнена змейкой:

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

Даны натуральные числа $n$, $m$, $x$, $y$ $ \left ( 1 \leq x \leq n \leq 50, 1 \leq y \leq m \leq 50 \right )$. Здесь $n$ — количество строк матрицы, $m$ — количество столбцов матрицы, $x$ и $y$ — номера строки и столбца искомого элемента.

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

Вывести элемент из строки $x$ и столбца $y.$

Тесты

Входные данные Выходные данные
$5 \ 2 \ 3 \ 1$ $4$
$6 \ 3 \ 4 \ 3$ $9$
$10 \ 5 \ 10 \ 2$ $48$

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

Решение

Читаем входные данные и объявляем массив $n$ на $m$, $num = 0$ — число элемента в этом массиве, далее будем заполнять его в цикле. Делаем перебор строк, для каждой строки есть число $j$ — номер элемента (в текущей строке), с которого мы записываем числа и число $dir$ — направление, в которое мы эти числа записываем (оно у нас 1 или -1). Если строка четная, то начинаем движение слева направо, если нечетная, то справа налево. Далее перебираем каждый элемент строки и записываем ему свой номер. В ответе выводим выбранный элемент.

Ссылки

Условие задачи на e-olymp

Код решения задачи ideone

e-olymp 907. Первый не больший чем 2.5

Задача

Задан массив вещественных чисел. Найти первый элемент массива, значение которого не превышает 2.5.

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

В первой строке задано количество элементов массива $n\left ( 0 < n \leq 100 \right )$. В следующей строке задано $n$ вещественных чисел.

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

Вывести в одной строке сначала индекс найденного первого указанного элемента массива и его значение с 2 десятичными знаками. В случае отсутствия такого элемента в массиве вывести «Not Found» (без кавычек).

Тесты

Входные данные Выходные данные
$5 \\ 6 \ 7.5\ 2.1 \ 2.0 \ 0$ $3 \ 2.10$
$5 \\ 6 \ 7.5 \ 5.1 \ 7.0 \ 80$ $Not \ Found$
$7 \\ 5 \ 4.7 \ 50 \ 8.9 \ 2.7 \ 3 \ 1.5$ $7 \ 1.5$

Решение задачи с помощью потоковой обработки

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

Решение задачи

Будем просматривать все веденные элементы и для каждого осуществлять проверку, если элемент не превышает 2.5, тогда в ответе выводим в одной строке сначала индекс найденного первого указанного элемента и его значение с 2 десятичными знаками. Если же такого элемента нет, выводим на экран $Not \ Found.$

Решение задачи с помощью массивов

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

Решение задачи

Введем обозначения: $x$ – имя массива, $n$ – количество элементов в массиве, $i$ – индекс элемента массива. Нам необходимо просмотреть весь массив. Если значение просматриваемого элемента не превышает 2,5, то в ответе вывести в одной строке сначала индекс найденного первого указанного элемента массива и его значение с 2 десятичными знаками. Если же такого элемента в массиве нет, вывести $Not \ Found.$

Ссылки

Условие задачи на e-olymp

Код решения с помощью потоковой обработки на ideone

Код решения с помощью массивов на ideone

e-olymp 340. Раз – горох, два – горох…

Задача

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

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

В первой строке натуральное четное число $M$ – количество украденных стручков, $2 \leq M \leq 1000.$

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

Все возможные сочетания количеств стручков, принесенных Сусликом и Хомой по одному сочетанию в строке. Каждое сочетание представляет собой два целых неотрицательных числа через пробел: первое число – количество стручков, принесенных Сусликом, второе – принесенных Хомой. Сочетания упорядочить по убыванию первого числа.

Тесты

Входные данные Выходные данные
$6$ $6 \ 0 \\ 2 \ 4$
$11$ $11 \ 0 \\ 7 \ 4 \\ 3 \ 8$
$18$ $18 \ 0 \\ 14 \ 4 \\ 10 \ 8 \\ 6 \ 12 \\ 2 \ 16$

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

Решение

Пусть $a$ — количество стручков, принесенных Хомой и $b$ — количество стручков, принесенных Сусликом. Так как по условию задачи Хома таскал только по четыре стручка, мы будем считать $a = a — 4$ и $b = b + 4$, чтобы таким образом перебрать все возможные сочетания количеств стручков, принесенных Сусликом и Хомой. В ответе выводим все возможные сочетания количеств стручков, принесенных друзьями по одному в строке, упорядоченные по убыванию первого числа.

Ссылки

Ссылка на e-olymp

Ссылка на ideone

e-olymp 2370. Автоматизированная Телефонная Станция

Задача

В Санкт-Петербурге телефонные номера имеют формат “XXX — XX — XX” , где первые три цифры представляют собой индекс Автоматизированной Телефонной Станции (АТС). Каждая АТС имеет в точности $10000$ уникальных телефонных номеров. Петр только что приобрел новую квартиру и хочет установить телефонную линию. По его мнению телефонный номер является счастливым, если значение арифметического выражения, которое он собой представляет, равно нулю. Например, телефонный номер $102—40—62$ является счастливым $\left ( 102 — 40 — 62 = 0\right )$, а номер $157—10—47$ таковым не является $\left ( 157 — 10 — 47 \neq 0\right )$.
Петр знает индекс АТС, которая обслуживает его дом. Он хочет подсчитать количество счастливых номеров, которое она может иметь.

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

Единственное целое число $n$ — индекс АТС Петра $\left ( 100 \leq n \leq 999 \right )$.

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

Одно число — количество счастливых телефонных номеров, которые имеются у АТС Петра.

Тесты

Входные данные Выходные данные
$196$ 3
$239$ $0$
$101$ $98$

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

Решение

Рассмотрим случай, когда номер абонентской группы Петра $100,$ тогда счастливых номеров будет $ 99 \left ( 99+1, 98+2, \dots \right ).$ Далее рассмотрим случай, когда индекс $101,$ теперь количество счастливых номеров — $98 \left ( 99+2, 98+3, \dots \right ).$ В этом случае, если первые $2$ цифры после индекса и последние $2$ цифры номера будут равны $01,$ то этот номер уже не будет являться счастливым номером. Теперь на замену счастливому номеру $100 — 50 — 50$ идут $2$ счастливых номера: $101 — 50 — 51$ и $101 — 51 — 50.$ Суммарно количество счастливых номеров уменьшилось на $1.$ Пользуясь данной логикой, в каждой последующей абонентской группе будет на $1$ счастливый номер меньше. Для $n < 198$ счастливых номеров не будет. Следовательно, количество счастливых телефонных номеров, которые имеются у АТС Петра мы можем вычислить по формуле $199 — n$.

Ссылки

Ссылка на e-olymp

Ссылка на ideone

e-olymp 542. Поставка содовой воды

Задача

Тим ужасно любит содовую воду, иногда он ею никак не может напиться. Еще более досадным является тот факт, что у него постоянно нет денег. Поэтому единственным легальным способом их получения является продажа пустых бутылок из-под соды. Иногда в добавок к его лично выпитым бутылкам добавляются те, которые Тим иногда находит на улице. Однажды Тима настолько замучила жажда, что он решил пить до тех пор пока мог себе это позволить.

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

Три целых неотрицательных числа $e$, $f$, $c$, где $e$ $\left(e < 1000\right)$ — количество пустых бутылок, имеющихся у Тима в начале дня, $f$ $\left(f < 1000\right)$ — количество пустых бутылок, найденных в течение дня, и $c$ $\left(1 < c < 2000\right)$ — количество пустых бутылок, необходимых для покупки новой бутылки.

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

Сколько бутылок содовой воды смог выпить Тим, когда его замучила жажда?

Тесты

Входные данные Выходные данные
[latex]9[/latex] [latex]0[/latex] [latex]3[/latex] [latex]4[/latex]
[latex]5[/latex] [latex]5[/latex] [latex]2[/latex] [latex]9[/latex]
[latex]0[/latex] [latex]8[/latex] [latex]4[/latex] [latex]2[/latex]
[latex]22[/latex] [latex]0[/latex] [latex]4[/latex] [latex]7[/latex]

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

Решение

Можно считать, что изначально у Тима имеется $e+f$ пустых бутылок. Допустим, у него есть хотя бы $c$ бутылок, необходимых для покупки новой, Тим идет и меняет их на одну полную бутылку. Затем выпивает её, после чего общее количество пустых у него уменьшается на $c — 1$. То есть за $e + f$ пустых бутылок он сможет выпить $\frac{e + f}{c — 1}$ бутылок содовой воды. Нам также следует добавить к $c — 1$ маленькую константу $a = 0.0001$, чтобы в случае, когда количество бутылок кратно $c — 1$, Тиму нельзя было взять новую бутылку с недостающим количеством пустых бутылок для этого. Следовательно, он должен выпить на одну бутылку меньше. В результате выводим целое число бутылок содовой воды, которые Тим смог выпить, когда его замучила жажда.

Ссылки

Ссылка на e-olymp

Ссылка на ideone