e-olymp 8288. Олимпиада по программированию

Олимпиада по программированию

Диаграмма Эйлера-Венна
На АСМ-олимпиаду прибыло [latex]N[/latex] участников. В результате анкетированные члены жури установили, что [latex]A[/latex] участников программируют на Cи, [latex]B[/latex] на Python, [latex]C[/latex] на Pascal, [latex]X[/latex] одновременно знают Cи и Python, [latex]Y[/latex] — Python и Pascal, [latex]Z[/latex] — Cи и Pascal. Имея значения [latex]N, A, B, C, X, Y, Z[/latex] установите количество участников, которые программируют на трёх языках программирования.

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

В одном ряду через пробел сем действительных чисел [latex]N, A, B, C, X, Y, Z[/latex] значения которых не превышают [latex]100[/latex].

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

Единственное число – количество участников, которые программируют на трёх языках программирования.

Тесты

# ВХОДНЫЕ ДАННЫЕ ВЫХОДНЫЕ ДАННЫЕ
1 100 40 50 60 15 20 25 10
2 100 50 60 60 20 40 25 15
3 80 50 40 60 20 30 25 5
4 80 50 40 60 0 0 0 0
5 40 20 30 0 5 0 10 5

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

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

Сначала вводим 7 переменных: [latex]N[/latex] — количество участников, [latex]A[/latex] — количество участников, которые программируют на Cи, [latex]B[/latex] — на Python, [latex]C[/latex] — на Pascal, [latex]X[/latex] — количество участников, которые одновременно знают Cи и Python, [latex]Y[/latex] — Python и Pascal, [latex]Z[/latex] — Cи и Pascal. Алгоритм решения данной задачи состоит в том, чтоб найти разницу между заданным количеством участников, которые одновременно знают по два языка [latex](x + y + z)[/latex], и их возможным количеством [latex](a + b + c — n)[/latex]. Тем самым, мы найдем количество людей, которые знают одновременно 3 языка.

Если же после ввода данных, окажется, что количество людей знающих два языка равно нулю [latex](x + y + z == 0)[/latex], то программа выведет, что людей знающих одновременно три языка также нет.

 

e-olymp 3609. Стартовая скорость

Задача

Кристина Стуй, Олеся Повх, Елизавета Брызгина, Мария Ремень

Женская олимпийская сборная Украины в эстафете 4×100 метров на олимпийских играх в Лондоне в составе (Кристина Стуй, Олеся Повх, Елизавета Брызгина, Мария Ремень)

Несмотря на то, что женская сборная Украины в эстафете [latex]4 \times 100[/latex] метров на олимпийских играх в Лондоне в составе Кристины Стуй, Олеси Повх, Елизаветы Брызгиной и Марии Ремень выступила очень достойно и завоевала бронзовые медали, подобная мысль назойливо мучила и программиста Васю.

Как показали тщательные экспериментальные проверки, модель, построенная им в задаче «Крейсерская скорость» оказалась не совсем точной. Многочасовые наблюдения, проведённые им на тренировках как украинских спортсменок, так и спринтеров из других стран, показали, что некоторые спортсмены во время старта разгоняются, а некоторые притормаживают. Но всё равно, после [latex]25[/latex] стартовых метров дистанции они движутся далее равномерно.

Феномен с «притормаживанием» Васе удалось с точки зрения физики пояснить довольно просто. Во время старта каждый из спортсменов имеет некоторую стартовую скорость, приобретённую в результате мощного отталкивания от стартовых колодок. Эта скорость может быть либо меньше «крейсерской», либо больше. В первом случае спортсмену нужно работать над наращиванием мышц ног для увеличения силы отталкивания. Во втором – мышцы уже наращены, но в результате того, что сила сопротивления воздуха зависит от площади соприкосновения тела спортсмена с ним, во время распрямления спортсмена во время старта эта сила сопротивления возрастает и становится постоянной только после указанных выше [latex]25[/latex] стартовых метров дистанции.

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

Ваша задача помочь в этом Васе, считая, что на первых [latex]25[/latex] метрах дистанции движение легкоатлета является равноускоренным, независимо от того, ускоряется он или замедляется.

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

В единственной строке задано [latex]2[/latex] вещественных числа, разделённых единичным пробелом, соответственно результат спортсмена на дистанциях [latex]100[/latex] и [latex]200[/latex] метров.

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

В единственной строке выведите стартовую скорость спортсмена с точностью не менее [latex]6[/latex]-ти знаков после запятой.

Тесты

Входные данные Выходные данные
[latex]9.63[/latex] [latex]19.32[/latex] [latex]10.844104[/latex]
[latex]9.77[/latex] [latex]19.59[/latex] [latex]10.606721[/latex]
[latex]9.69[/latex] [latex]19.40[/latex] [latex]10.469771[/latex]
[latex]10.02[/latex] [latex]20.12[/latex] [latex]10.548908[/latex]
[latex]9.88[/latex] [latex]19.85[/latex] [latex]10.781564[/latex]

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

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

Со школы знаем формулу скорости, [latex]v=\frac{l}{t}[/latex]. Найдем из неё [latex]l=vt[/latex].
Пусть [latex]l_1[/latex] и [latex]l_2[/latex] — это расстояния, на которых спортсмен бежит с «крейсерской» скоростью соотвественно на дистанциях в [latex]100[/latex] и [latex]200[/latex] метров, где [latex]l_1=l-l_p[/latex], где [latex]l[/latex] — это длина дистанции, а [latex]l_p[/latex] — длина разгона (известно из условия задачи). Аналогично для [latex]l_2[/latex]. Заменим [latex]t[/latex] на [latex]t_1-t_p[/latex], где [latex]t_1[/latex] — время, за которое спортсмен пробегает всю дистанцию, а [latex]t_p[/latex] — время разгона на первых [latex]25[/latex]-ти метрах дистанции. Получаем формулы: [latex]l_1=v(t_1-t_p)[/latex] и [latex]l_2=v(t_2-t_p)[/latex]. Из отношения этих формул [latex]\frac {l_1}{l_2}=\frac {v(t_1-t_p)}{v(t_2-t_p)}[/latex], найдем [latex]t_p[/latex]. Имеем [latex]t_p=\frac{l_1t_2-l_2t_1}{l_2-l_1}[/latex]. Подставляем [latex]l_1=v(t_1-t_p)[/latex]. Находим «крейсерскую» скорость спортсмена, [latex]v=\frac{l_1}{t_1-t_p}[/latex]. Из уравнения равноускоренного движения
[latex]x=v_0t \times \frac{at^2}{2}[/latex], где [latex]x=25[/latex] метров (длина разгона). Находим [latex]v_0[/latex] — это и есть стартовая скорость спортсмена. Для этого заменим [latex]a[/latex] на [latex]\frac{v-v_0}{t_p}[/latex]. Приводим подобные и выражаем [latex]v_0[/latex]. В итоге получаем формулу стартовой скорости спортсмена, [latex]v_0=\frac{50-vt_p}{t_p}[/latex]. Задача решена.

Ссылки

Условие задачи на e-olymp
Код решения на ideone.com

e-olymp 125. Олимпиада

Условие

Олимпиада началась в [latex]h_1[/latex] часов [latex]m_1[/latex] минут [latex]s_1[/latex] секунд, а закончилась в эти же календарные сутки в [latex]h_2[/latex] часов [latex]m_2[/latex] минут [latex]s_2[/latex] секунд. Сколько времени (час мин сек) проходила олимпиада?

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

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

[latex]0 \le h_1 \le h_2 \le 23[/latex], [latex]0 \le m_1, m_2 \le 59[/latex], [latex]0 \le s_1, s_2 \le 59[/latex].

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

В единственную строку выходного файла нужно записать время продолжительности олимпиады в формате час мин сек.

Тестирование

Входные данные Выходные данные
1 9 30 0

12 45 30

3 15 30
2 9 30 30

12 45 0

3 14 30
3 9 45 0

12 30 30

2 45 30
4 9 45 30

12 30 0

2 44 30

Код

Решение

Очевидным решением задачи является вывод через пропуск разниц  [latex]h_2 — h_1[/latex], [latex]m_2 — m_1[/latex] и [latex]s_2 — s_1[/latex]. Однако если часы, минуты или секунды конца олимпиады будут меньше соответсвующих значений ее начала, то результат разницы разницы будет отрицательным. Чтобы этого избежать, существуют два if-блока, которые увеличивают количество секунд на [latex]60[/latex] и уменьшают количество минут на [latex]1[/latex], а так же выполняют аналогичные действия с минутами и часами в том случае, если входное количество минут или секунд начала олимпиады будут превышать соответственно минуты и секунды конца. После этого выводятся разницы, указанные в начале решения, которые теперь будут отображать реальную продолжительность олимпиады и гарантированно будут неотрицательными.

Ссылки

Условие задачи на E-Olymp;

Код программы на Ideone.com;

Подтверждение решения на E-Olymp.