e-olymp 7365. Молоко и пирожок

Ссылка на задачу на e-olymp.

Условие

Ученикам первого класса дополнительно дают стакан молока и пирожок, если вес первоклассника менее $30$ кг. В первых классах школы учится $n$ учеников. Стакан молока имеет емкость $200$ мл, а упаковки молока – $0,9$ л. Определить количество дополнительных пакетов молока и пирожков, необходимых каждый день.

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

В первой строке задано целое число $n$ ([latex]1 \leq n \leq 100[/latex]). В следующей строке идут $n$ положительных действительных чисел – массы первоклассников.

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

Два целых числа — количество дополнительных пакетов молока и пирожков, необходимых каждый день.

Тесты

Входные данные Выходные данные
20
30 37 31 25 32 29 35 40 28 25 30 34 26 23 20 22 21 30 38 33
2 9
3
30 29 30
1 1
5
25 41 56 20 20
1 3

Код.

Решение.

Заведем переменные для хранения количества дополнительных пирожков ($p$), стаканов молока ($m$), а также переменную в которой будет храниться вес текущего первоклассника ($w$). Если вес меньше 30, то увеличиваем количество дополнительных пирожков, и добавляем 200 к молоку (объем одного стакана). После того, как вес всех детей был учтен, делим значение хранящееся в переменной $m$ на 900 и округляем в большую сторону, для того, чтобы вычислить необходимое количество пакетов молока.
Ссылка на решение задачи на сайте Try Haxe!

A710

Ссылка на оригинальное задания: тут.

Условие

Дана матрица $A$ размера [latex]n \times m[/latex]. Получить транспонированную матрицу $A^*$ (ее размер [latex]m \times n[/latex]).

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

Первая строка содержит параметры $n$ и $m$. В следующих $n$ строках содержится матрица $A$.

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

Матрица $A^*$.

Тесты

n m A A*
3 4 1 2 3 4
2 3 4 5
3 4 5 6
1 2 3
2 3 4
3 4 5
4 5 6
2 3 1 2 3
2 3 4
1 2
2 3
3 4

Код.

Решение.

Считываем матрицу [latex]n \times m[/latex], а затем создаем транспонированную матрицу, в которой строки исходной матрицы являются столбцами и наоборот. Выводим $A^*$.
Ссылка на решение задачи на сайте Try Haxe!

Ю 4.25

Задача

Заполнить матрицу заданного размера [latex]M(k,l)[/latex] числами 1, 2, 3, 4 так, чтобы по горизонтали, вертикали и диагонали не было одинаковых рядом стоящих чисел.

Тесты

[latex]k[/latex] [latex]l[/latex] Output
6 6
5 5

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

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

Заполняем массив с помощью формулы (j + 2 * (i % 2)) % 4 + 1. При i четном 2 * (i % 2) будет обращаться в 0. То есть в нечетных строках будут числа 1, 2, 3, 4 подряд, а в четных строках будут меняться цифры 1 на 3, 2 на 4, 3 на 1, 4 на 2.

Решение задачи на Try Haxe !

Решение этой задачи на С++ и Java.

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 !
Решение задачи на С++.

А57г. Функция

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

Дано действительное число [latex]a[/latex]. Вычислить [latex]f(a)[/latex], если
[latex]f(x) = \begin{cases}0, & x \le 0;\\x^2 — x, & 0 < x \le 1;\\x^2 — \sin(\pi \cdot x^2), & x > 1 \end{cases}[/latex]

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

Находим промежуток, которому принадлежит [latex]a[/latex]. Если [latex]a \in (-\infty;0][/latex], то [latex]f(a) = 0[/latex], если [latex]a \in (0;1][/latex], то [latex]f(a) = a^2 — a[/latex], в остальных случаях [latex]f(a) = a^2 — \sin(\pi \cdot a ^ 2)[/latex].

График функции:
Рисунок 1

Тесты

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

Реализация

Код решения на Try Haxe !

Решение этой задачи на C++.

ML38. Максимальный размер прямоугольника, вырезанного из круга

Задача

Какого наибольшего размера прямоугольник можно вырезать из круга диаметра d, если известно, что длины его сторон образуют золотую пропорцию.

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

Единственное число — диаметр окружности.

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

Два числа — длины сторон прямоугольника.

Рисунок 1

Тесты

Входные данные Выходные данные
[latex]d[/latex] [latex]a[/latex] [latex]b[/latex]
1 0 0 0
2 1 0.850651 0.525731
3 2 1.7013 1.05146
4 21 17.8638 11.0404
5 0.32 0.272208 0.168234
6 1.7 1.44611 0.893743
7 134 113.981 70.448

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

Выполнение кода на Try Haxe !

Решение

Прямоугольник будет иметь наибольший размер в случае, когда его вершины лежат на окружности. Тогда, очевидно, диаметр окружности будет диагональю данного прямоугольника. Согласно условию, длины его сторон образуют золотую пропорцию. Это означает, что [latex]\frac { a }{ b } =\phi [/latex], где [latex]a[/latex] — длина большей стороны прямоугольника, [latex]b[/latex] — длина его меньшей стороны, а [latex]\phi=\frac { 1+\sqrt { 5 } }{ 2 } [/latex]. Отсюда [latex]a=b\cdot \phi[/latex]. По теореме Пифагора, [latex]{ a }^{ 2 }+{ b }^{ 2 }={ d }^{ 2 }[/latex]. Путём подстановки из предыдущего выражения и простых алгебраических преобразований получим формулу для вычисления длины меньшей стороны: [latex]b=d\cdot \sqrt { \frac { 1 }{ { \phi }^{ 2 }+1 } } [/latex].
Сначала для удобства находим значение [latex]\phi[/latex], затем — по указанным формулам длины сторон прямоугольника.

Решение этой задачи на С++.

e-olymp 1077. Java против C++

Ссылка на выполнение кода

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

Сторонники языков Java и C++ часто спорят о том, какой язык лучше для решения олимпиадных задач. Одни говорят, что в Java есть масса полезных библиотек для работы со строками, хорошо реализованы механизмы чтения и вывода данных, а так же радует встроенные возможности для реализации длинной арифметики. С другой стороны, С++ является классическим языком, скорость выполнения программ благодаря существующим компиляторам (например, Intel Compiler 10.0) гораздо выше, чем у Java.

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

В языке Java принято первое слово, входящее в название переменной записывать с маленькой латинской буквы, следующее слово идет с большой буквы (только первая буква слова большая), слова не имеют разделителей и состоят только из латинских букв. Например, правильные записи переменных в Java могут выглядеть следующим образом: javaIdentifier, longAndMnemonicIdentifier, name, nEERC.

В языке C++ для описания переменных используются только маленькие латинские символы и символ «_», который отделяет непустые слова друг от друга. Примеры: java_identifier, long_and_mnemonic_identifier, name, n_e_e_r_c.

Вам требуется написать программу, которая преобразует переменную, записанную на одном языке в формат другого языка.

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

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

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

В выходной поток требуется вывести аналог имени переменной в другом языке. Т.е. если переменная представлена в формате Java, то следует перевести в формат C++ и наоборот. В том случае, когда имя переменной не соответствует ни одному из вышеописанных языков, следует вывести «Error!».

Задача взята с сайта e-olymp.

Тесты:

Ввод Вывод
java_word javaWord
cppWorD cpp_wor_d
simpleword simpleword
two__underscores Error
underscore_in_the_end_ Error
UppercaseInTheBeginning Error
mixed_Style Error

Код:

Ход решения:

Со входного потока считывается название переменной, которая помещается в переменную $varName$. Затем вызывается вспомогательная функция $parseLanguage$, которая возвращает одно из значений enum: относится ли переменная к языку С++, Java, универсальная ли она или же, если ничего из вышеперечисленного не подошло, возвращает ошибку. Далее, проанализировав значение, которое нам вернула функция, решается, что делать с переменной: либо конвертировать её в переменную C++, либо в переменную Java, либо оставить её, как есть (универсальная переменная). В ином случае это ошибка, что тоже выводится. Функции $toCPP$ и $toJava$ также являются вспомогательными, которые «переводят» переменную из одного языка в другой.

A711a

Задача.

Дана матрица $A$ размера $m\times m$. Получить матрицу $AA^{*}$ (ее размер $m\times m$).
Размер матрицы:

m 4

Матрица:

1 2 3 4
5 6 7 8
9 0 1 2
3 4 5 6

Результирующая матрица:

30 70 20 50
70 174 68 122
20 68 86 44
50 122 44 86

Ход решения:

На входе считываем $m$ — размер матрицы. После этого создаем два вложенных массива — $A$ для хранения вводимых значений и вычислений, $result$ — для результатов вычислений. Переменная $sum$ нужна для хранения временного результата суммы произведений $A[i,k]A[j,k]$.

Код:

e-olymp 1154. Кружок хорового пения

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

В некотором учебном заведении функционирует кружок хорового пения. Начало кружка всегда происходит единообразно: по сигналу руководителя кружка все [latex]N[/latex] участников становятся в круг и каждый [latex]M[/latex] -й для распевки поёт гамму.

Руководитель кружка заметил, что размять голосовые связки не всегда удаётся всем участникам кружка. По заданным [latex]M[/latex] и [latex]N[/latex] помогите ему определить, или в очередной раз в разминке примут участие все участники хора.

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

Входные данные состоят из нескольких тестовых случаев. Каждый тестовый случай расположен в отдельной строке и содержит два целых числа [latex]M[/latex] и [latex]N[/latex].

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

Для каждого тестового случая в отдельной строке выведите «Yes», если в разминке примут участие все участники хора, в противном случае выведите «No».

Тесты:

n m answer
 4   1  Yes
 6   3  No

Код:

Ход решения:

Для начала нам надо найти наибольший общий делитель (НОД). Для этого хорошо подойдет алгоритм Евклида и если НОД равен единице, то все ученики распоются и на выходе подаётся «Yes», иначе «No».

Mif 17.18

Условие:

Принадлежит ли точка ([latex]x;y[/latex]) фигуре на рисунке?

Image

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

Два числа — координаты точки.

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

Слово «Yes», если точка принадлежит фигуре, в противном случае -«No».

Код:

Ход решения:

Точка будет принадлежит фигуре тогда и только тогда, когда будет выполняться одно из условий:

  • Оба числа не отрицательные и их сумма не превышает 6;
  • Оба числа не положительные, и их сумма не меньше 6.

Если одно из этих условий выполняется, то на выходе имеем «Yes», иначе — «No».