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

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

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

Алгоритм решения данной задачи состоит в том, чтоб найти разность между числом участников, что одновременно знают по два языка $(X + Y + Z)$, и числом, что показывает на сколько языков больше чем людей (разностью между общим количеством языков и участников) $(A + B + C — N)$. Тем самым, мы найдем количество людей, которые знают одновременно 3 языка. Его также можно объяснить используя диаграмму Эйлера-Венна, на которой отмечено семь областей.  Из условия следует, что:

$\begin {cases} x_1 &+ &x_2 &+ &x_3 &+ &x_4 &+ &x_5 &+ &x_6 &+ &x_7 &=N \newline x_1 &+ & & & &&x_4 &+ & & &x_6 &+ &x_7 &=A \newline & & &&x_3 &+ &x_4 &+ &x_5 &+ & & &x_7 &=B\newline & &x_2 &+ & & & & &x_5 &+ &x_6 &+ &x_7 &=C \newline & & &&& &x_4 && &&  &+ &x_7 &=X \newline & & & & && & &x_5 & & &+ &x_7 &=Y \newline  & & & & & & & & & &x_6 &+ &x_7 &=Z \end{cases}$

Нам нужно найти количество участников в [latex]x_7[/latex] области (области одновременного пересечения всех трех кругов). И получается, что:

$(X + Y + Z)-(A + B + C — N)=x_7$

Если же после ввода данных, окажется, что количество людей знающих два языка равно нулю $(X + Y + Z == 0)$, то программа выведет, что людей знающих одновременно три языка также нет.

 

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

    • «В одному рядку через пробел сем действительных чисел значения…» — это на каком языке получилось? Кажется вообще ни на каком.
    • Вы попытались перевести все, а «Сі» оставили на языке оригинала. Это авторская задумка или недосмотр?
    • Вы пишите «количество участников, что программируют». Давайте вместо «что» напишем «которые».
    • Вы пишите «находим разницу между общим количеством языков, которое знают участники и количеством самих участников». Т.е. Вы от языков отнимаете участников?! Как же такое можно делать приличному молодому человеку?
    • Зачем объяснять такую простую программу? Зачем четыре строчки объяснять одну строчку ввода данных. А потом Вы еще подробно объясняете вычитание. Не нужно такое делать. Объяснять надо алгоритм. Откуда взялись все эти волшебные формулы?!
    • И конечно, традиционно, отступы.
    • «В одному рядку» = «В одной строке»
    • Вы теперь не 4 а 5 строк тратите на объяснение того факта, что данные будут введены. Зачем? Вы можете просто удалить первое предложение пояснения? Оно просто повторяет обозначения из условия задачи и больше не несет информации.
    • Возможно новогоднее настроение мешает мне понять Ваше объяснение. Давайте сделаем шаг навстречу? Я вставлю в Вашу публикацию иллюстрацию с диаграммой Эйлера-Венна. В ней будут семь областей различных цветов, соответствующих разным сочетаниям знания языков. Теперь вам будет легко показать справедливость Вашей формулы. Нужно только указать сколько раз область каждого цвета учитывается в Ваших суммах.
  1. Надеюсь, 8-мартовское настроение не помешает мне правильно оценить работу 🙂
    Это я так намекаю, что вы решаете задачу темпами соизмеримыми со строительством высотного дома у меня по соседству.
    — «их возможным количеством»? Может «количеством участников»?
    — Писать ««7» области» неправильно. Нужно ввести обозначение с индексом. Например, так: обозначим через $n_i$ количество участников в $i-$й области на рисунке. Тогда получим: $\sum\limits_{i=1}^{7}n_i = n,$ $n_1+n_4+n_6+n_7=A$ и т.д.
    Или можно записать в виде системы линейных алгебраических уравнений:$$\left \{ \begin {matrix}
    x_1 &+ &x_2 &+ &x_3 &+ &x_4 &+ &x_5 &+ &x_6 &+ &x_7 &=n \\
    x_1 &+ & & & &&x_4 &+ & & &x_6 &+ &x_7 &=A \\
    & & &&x_3 &+ &x_4 &+ &x_5 &+ & & &x_7 &=B\\
    & &x_2 &+ & & & & &x_5 &+ &x_6 &+ &x_7 &=C \\
    x_1 &+ & & &x_3 &+ &x_4 &+ &x_5 &+ &x_6 &+ &x_7 &=X \\
    & &x_2 &+ &x_3 &+ &x_4 &+ &x_5 &+ &x_6 &+ &x_7 &=Y \\
    x_1 &+ &x_2 &+ & & &x_4 &+ &x_5 &+ &x_6 &+ &x_7 &=Z
    \end{matrix} \right.
    $$
    — Если Вы видите, что формула слишком длинная и не отображается правильно, разбейте её на несколько.
    — Личная просьба. Не используйте слово «разница» вместо «разность». Это не ошибка и вполне понятно. Но в математическом контексте режет слух.

Добавить комментарий