А787

Задача

Вернемся к сортам гороха с желтыми (аллель [latex]R[/latex]) и зелеными (аллель [latex]r[/latex]) семядолями ( смотри предыдущую задачу). Были подвергнуты скрещиванию два растения, одно из которых имело зеленые семядоли. В результате скрещивания получили [latex]m[/latex] растений [latex]F_{1}[/latex] (смотри задачу 785) с желтыми семядолями и [latex]n[/latex]- с зелеными [latex]m\geq 0,n\geq 0 [/latex]. Используя законы Менделя, указать наиболее вероятное сочетание аллелей [latex]R[/latex] и [latex]r[/latex] в генотипе второго родителя и в генотипах каждого их растений [latex]F_{1}[/latex]

Ideone

Тесты

input output
3 2 P: rr x RR
F1: RR, Rr, Rr, rr, rr
8 9 P: rr x Rr
F1: Rr, Rr, Rr, Rr, Rr, Rr, Rr, Rr, rr, rr, rr, rr, rr, rr, rr, rr, rr

Решение

Cоздаем функцию для вывода последовательностей. Мы рассматриваем два варианта конечная эта последовательность или к ней будут добавляться еще элементы, соответственно END или NEND. Если последовательность не конечная то после каждого элемента мы выводим запятую с пробелом.  Если же последовательность не конечная, то выполняется перевод на новую строку. У нас дан гомозиготный рецессивный ген и количество потомков с указанием сколько потомков с каким фенотипом (внешнее проявление гена). Следовательно у нас есть несколько вариантов [latex]rr x RR[/latex], тогда все родители будут желтыми, так как каждый потомок получит по половине качества, то есть каждый потомок будет иметь такой ген [latex]Rr[/latex] следовательно он будет желтым. Если же все будут зелеными, то второй предок тоже был [latex]rr[/latex] . Значит у нас получается, что у родителей [latex]rr[/latex] и [latex]rr[/latex] получаются все дети [latex]rr[/latex]. Остается еще два варианта, если у нас нет не зеленых не желтых детей, значит у нас нет потомства, а если же у нас есть и желтые и зеленые дети , то остается только один вариант, что второй родитель был [latex]Rr[/latex], а это значит, что в потомстве все кто желтые [latex]Rr[/latex], а все кто зеленые [latex]rr[/latex]

 

e-olymp 4514. Сортировка вагонов — А

Задача

2015-06-28 18-54-20 Скриншот экрана

К тупику со стороны пути 1 (см. рисунок) подъехал поезд. Разрешается отцепить от поезда один или сразу несколько первых вагонов и завезти их в тупик (при желании, можно даже завезти в тупик сразу весь поезд). После этого часть из этих вагонов вывезти в сторону пути 2. После этого можно завезти в тупик еще несколько вагонов и снова часть оказавшихся вагонов вывезти в сторону пути 2. И так далее (так, что каждый вагон может лишь один раз заехать с пути 1 в тупик, а затем один раз выехать из тупика на путь 2). Заезжать вагонам в тупик с пути 2 или выезжать из тупика на путь запрещается. Нельзя с пути 1 попасть на путь 2, не заезжая в тупик.

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

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

Вводится число N — количество вагонов в поезде (1N2000). Дальше идут номера вагонов в порядке от головы поезда, едущего по пути 1 в сторону тупика. Вагоны пронумерованы натуральными числами от 1 до N, каждое из которых встречается ровно один раз.

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

Если сделать так, чтобы вагоны шли в порядке от 1 до N, считая от головы поезда, когда поезд поедет по пути 2 из тупика, можно, выведите действия, которые нужно проделать с поездом. Каждое действие описывается двумя числами: типом и количеством вагонов:

  • если нужно завезти с пути 1 в тупик K вагонов, должно быть выведено сначала число 1, а затем — число K (K1),
  • если нужно вывезти из тупика на путь 2 K вагонов, должно быть выведено сначала число 2, а затем — число K (K1).

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

Если выстроить вагоны по порядку невозможно, выведите одно число 0.

Задача на e-olimp

Тесты

input output
33 2 1 1 32 3
44 1 3 2 1 22 11 22 3
32 3 1 0

Решение

Мы вводим переменную, которая начинается с единицы и отвечает за то чтобы вагоны выходящие из тупика шли только по порядку

затем вводим переменную, которая запоминает какой вагон заехал в тупик последним

Мы это делаем, для вычисления количества вагонов которое заехало в тупик и которое выехало из тупика. Потом мы поочередно считываем в цикле [latex]for[/latex] все номера вагонов и кидаем их всех в тупик. Но если во время этой операции мы нашли вагон с номером [latex]last\_num[/latex], то сразу пишем (в строковой поток, так как есть вероятность того, что так завести вагоны нельзя) сколько вагонов мы завели в тупик. Далее мы видим, что в тупике есть вагоны идущие по порядку, мы выводим вагоны из тупика и считаем их количество. После мы выводим это количество в строковой поток( с цифрой 2 вначале) и запоминаем сколько вагонов было завезено в тупик. Далее если мы вывели из тупика все вагоны, то выводим строковой поток, иначе выводим 0.

 

e-olymp 975. Флойд

Задача: 

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

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

В первой строке содержится количество вершин графа n (1n100). В следующих n строках находится по n чисел, которые задают матрицу смежности графа. В ней -1 означает отсутствие ребра между вершинами, а любое неотрицательное число — присутствие ребра данного веса. На главной диагонали матрицы всегда расположены нули.

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

Вывести искомое максимальное кратчайшее расстояние.

Задача на e-olimp

Тесты

input output
4
0 5 9 -1
-1 0 2 8
-1 -1 0 7
4 -1 -1 0
16
5
0 5 5 6 -1
-1 0 9 8 4
-1 -1 0 3 8
6 -1 -1 0 5
-1 2 5 6 0
14

Решение:

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

Ю2.3

Задача: Треугольник задан координатами своих вершин на плоскости:   [latex]A(x_{a}, y_{a})[/latex], [latex]B(x_{b}, y_{b})[/latex], [latex]C(x_{c}, y_{c})[/latex]. Определить, является он прямо-, остро-, или тупоугольным.

Замечание: Не следует отбрасывать экстремальные случаи, когда вершины треугольников совпадают или лежат на одной прямой. Например, треугольник с нулевой стороной обладает свойством прямоугольника и имеет два прямых угла!

Тесты:

[latex]x_{A}[/latex] [latex]y_{A}[/latex] [latex]x_{B}[/latex] [latex]y_{B}[/latex] [latex]x_{C}[/latex] [latex]y_{C}[/latex] Результат комментарий
0 1 0 2 0 3 тупоугольный пройден
1 4 3 2 6 2 тупоугольный пройден
6 2 6 2 6 4 прямоугольный пройден
 2 1 2 3 5 3 прямоугольный пройден
5 5 5 5 5 5 невозможно определить  тип треугольника пройден
 2 1 3 4 4 1 остроугольный пройден
 2 1 1 3 4 4 остроугольный пройден

Ссылка на С++ :  http://ideone.com/LfWkbB

Ссылка на Java: http://ideone.com/yrS444

Код:

 

Решение : 

Для начала проверяем такое условие при котором мы не можем определить тип треугольника, если же оно не выполняется , то треугольник прямоугольный

Если не одно из этих условий не выполняется, то мы ищем стороны треугольника и по теореме косинусов находим косинус угла. Далее выполняем три таких условия, при которых определяется какой треугольник : остро- тупо- или прямоугольный

 

 

Ю1.26

Задача:

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

Тесты

[latex]x_{А}[/latex] [latex]y_{A}[/latex] [latex]x_{B}[/latex] [latex]y_{B}[/latex] [latex]x_{C}[/latex] [latex]y_{C}[/latex] Основание ([latex]BC[/latex]) Высота[latex]h[/latex] Комментарий
7 9 45 9 34 5 11 13 пройден
0.75 1 0.25 2 0.5 3 1 0 пройден
98 67 56 47 34 95 52 47 пройден
0 1 0 3 0 4 1 0 пройден

В четвертом  примере имеем вырожденный треугольник, для которого площадь будет равна нулю , следовательно и высота так же равна 0

Код:

ссылка на C++ : http://ideone.com/fBfd8S

ссылка на Java : http://ideone.com/ut9G6J

 

Решение:

Для начала находим стороны треугольника :

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

и с помощью площади находим высоту :

и в конце выводим высоту и основание.

А808 б

Задача :

Дан текст. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть, как и прежде, словами. Найти все слова, содержащие наибольшее количество гласных латинских букв ( a, e, i, o, u ).

Тесты :

Исходный текст Обработанный текст
Two households, both alike in dignity,
In fair Verona, where we lay our scene,
From ancient grudge break to new mutiny,
Where civil blood makes civil hands unclean.
households,
unclean.
alike
Verona,
ancient
makes
mutiny,
Where
break
grudge
civil
scene,
our
blood
where
fair
civil
dignity,
From
hands
new
to
Two
lay
we
in
both
In
For never was a story of more  woe . Than this of Juliet and her Romeo. Juliet  Romeo  never  more  woe for was a story of Than this of and her 

 

 

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

Ссылка на программу :  http://ideone.com/xXCrPe

Решение :

Для решение этой задачи я воспользовалась возможностью, которую предоставляет мне библиотека algorithm .

  1. Объявляем  переменные – флаги и счетчики для всех видов слов.
  2. Функция для завершения чтения слова и увеличение счетчика слова на единицу
  3. Стандартный строковый объект класса string.
  4. Ввод текста из стандартного потока ввода
  5. Проход по символам текста
  6. Считаем
  7. Сортируем