e-olymp 124 Квадрат

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

Найдите периметр и площадь квадрата.

Входные данные:
Каждая строка является отдельным тестом и содержит одно целое число — длину стороны квадрата $n$ (1 $\leq$ $n$ $\leq$ 1000).

Выходные данные:
Для каждого теста выведите в одной строке периметр и площадь квадрата.

Тесты

Входные данные Выходные данные
1 3
5
10
12 9
20 25
40 100
2 3
3
3
12 9
12 9
12 9
3 1000
1
500
4000 1000000
4 1
2000 250000

Код

Решение

У нас дана сторона квадрата $n$.

  • Периметр квадрата это сумма всех сторон ($P = a+b+c+d$), так как у квадрата все стороны равны ($a = b = c = d = n$), то формула периметра квадрата это $P = n*4$ ;
  • Площадь квадрата это произведение двух сторон квадрата на синус угла между ними ($S = a*b*sin\alpha$). Так как у квадрата все углы равны девяносто градусов ($sin\alpha = sin 90 = 1$) и все стороны равны ($a = b = n$) то площадь квадрата это $S = n*n$;
  • Так как каждая новая строка — новое значение для стороны квадрата и таких строк неизвестное количество то используем while (cin >> n) для потоковой обработки данных;

Задача решена.

Ссылки

  • Задача на сайте e-olymp
  • код решения Ideone

e-olymp 566. Письмо почтальона Печкина

Задача

Дорогие ребята!
Наблюдая за тем, как Шарик распиливал нестандартную шахматную доску, я также решил задать для вас задачку: “А сколько разных квадратных и прямоугольных (не считая квадратных) досок мог бы получить при распиливании Шарик из найденной им нестандартной прямоугольной шахматной доски размером $M\times N$?”

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

В первой строке количество заданий Печкина $K$, в последующих $K$ строках по два целых числа $M$ и $N$ $(1 \leqslant K, M, N \leqslant 100)$, разделённых пробелом.

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

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

Тесты

Входные данные Выходные данные
1. 1
3 2
8 10
2. 2
4 4
2 2
30 70
5 4
3. 4
3 3
25 46
100 100
1 1
14 22
12350 338975
338350 25164150
1 0

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

Объяснение

Ответом на каждый запрос будет количество квадратов и прямоугольников которые можно получить из нашей шахматной доски размера $M\times N$. Для вычисления количества квадратов нам надо посчитать, сколько квадратов каждого возможного размера поместится в нашей шахматной доске. Аналогично для прямоугольников. Пример с доской $3\times 2$ разобран на картинке.

Пояснение к первому тесту

Для подсчёта квадратов, нам следует отдельно считать их количество для каждого возможного размера.  Таким образом сначала идут квадраты $1\times 1$, то есть $M\cdot N$ квадратов. Далее, квадратов $2\times 2$ помещаются ровно на $1$ меньше горизонтально и на $1$ меньше вертикально, значит получаем $(M-1)\times (N-1)$. Соответственно, $(M — 2)\times (N — 2)$ для квадратов $3\times 3$. И так продолжаем пока квадрат помещается в нашу доску.

Аналогично мы поступаем и с прямоугольниками. Однако считая количество прямоугольников каждого размера, нам нужно считать сколько поместится прямоугольников размера $(1\times 1), (1\times 2)\dots (1\times N)$. Также $(2\times 1), (2\times 2)\dots (2\times N)$. И так до $(M\times 1), (M\times 2)\dots (M\times N)$. Это довольно просто реализовать используя вложенный цикл.

Не стоит забывать, что квадрат — тот же прямоугольник, но с равными сторонами и в нашем цикле мы считаем все прямоугольники. А так как квадраты мы не должны учитывать, то после нахождения числа прямоугольников, нам нужно вычесть из него количество квадратов. В коде после нахождения и вывода числа квадратов, мы домножили это число на $(-1)$ и и уже после прибавили к нему количество прямоугольников, таким образом не учитывая квадраты.

Ссылки

Условие на e-olymp.

Код на ideone.

 

e-olymp 4142 Большой XOR

Задача

Для заданного целого $x$ найти количество таких $a$, удовлетворяющих условию:

  • $ a $ xor $x > x $
  • $ 0 < a < x $

где $a$ и $x$ — целые, xor — битовый XOR оператор.

Имеются $q$ запросов, каждый из которых содержит целое число $x$. Для каждого запроса выведите общее количество значений $a$, удовлетворяющих условиям выше.

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

Первая строка содержит число запросов $q$ $(1 \leqslant q \leqslant 10^5)$. Каждая из следующих $q$ строк содержит значение $x$ $(1 \leqslant x \leqslant 10^{10})$.

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

Для каждого теста выведите в отдельной строке количество значений $a$, удовлетворяющих приведенным условиям.

Тесты

Входные данные Выходные данные
1 2
2
10
1
5
2 3
13
3
16
2
0
15
3 5
1
7
4294967295
42
451
0
0
0
21
60

Код

Решение

XOR выдаёт число, биты которого равны $1$, когда лишь у одного из чисел соответствующий бит равен $1$. Числа большие чем $x$ получаем лишь тогда, когда $2^{k}\leqslant a<2^{k+1}$, где $k$- номер бита числа $x$, который равен нулю. Таких $a$ существует $2^k$ штук для каждого такого бита.

  • Задача на e-olymp
  • Код программы на ideone
  • Засчитанное решение
  • e-olymp 6261. Устройство для анализа бюллетеня

    Задача

    Избирательная комиссия Флатландии готовится к президентским выборам. Чтобы свести к минимуму человеческий фактор при подсчете голосов, они решили разработать автоматическое устройство для анализа бюллетеней (УАБ).

    На пост президента баллотируются $n$ кандидатов. Бюллетень содержит одно квадратное поле для каждого кандидата. Избиратель должен отметить ровно одно из полей. Если поле не помечено или имеется два или более отмеченных поля, бюллетень недействителен. Каждый избиратель ставит свой бюллетень на специальный сканер в УАБ. Сканер анализирует отметки в бюллетене и создает специальную строку голосования из $n$ символов: ‘X’ для отмеченного поля и ‘.’ для немаркированного. Теперь строки голосования должны быть проанализированы, чтобы получить отчет. Ваша задача — разработать генератор отчетов для УАБ.

    С учетом строк голосования для всех бюллетеней Ваша программа должна распечатать отчет о голосовании. Кандидаты в протоколе должны быть расположены в порядке убывания количества голосов. Если два кандидата имеют одинаковое количество голосов, они должны иметь тот же порядок, что и в бюллетене для голосования. Для каждого кандидата рассчитайте его / ее результат в процентах (если кандидат получил p голосов, результат в процентах составляет $ \frac{100p}{m}$ ). В последней строке отчета должен быть указан процент недействительных бюллетеней.

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

    Первая строка содержит два целых числа $n$ и $m (2 \leqslant n \leqslant 10, 1 \leqslant m \leqslant 1000$) — количество кандидатов и количество бюллетеней. Следующие $n$ строк содержат фамилии кандидатов. Каждое имя представляет собой строку не более 100 английских букв. Нет ни одного кандидата с именем «Invalid».

    Затем следуют $m$ строк, каждая из которых содержит одну строку голосования.

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

    Выведите $n+1$ строк. Сначала выведите результаты для кандидатов в процентах. Для каждого кандидата выведите его / ее фамилию, затем пробел, а затем его / ее результат в процентах и знак процента ‘%‘. В последней строке должен быть указан процент недействительных бюллетеней: слово «Invalid», за которым следуют пробел, процент недействительных бюллетеней и знак процента.

    Округлите все числа до двух цифр после десятичной точки. Если число находится точно посередине двух представимых чисел, выведите большее (например, выведите «12.35» для 12.345).

    Тесты

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

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

    1 4 7
    Loudy
    Apples
    Dogman
    Miller
    .X..
    X…
    ….
    ..X.
    ..XX
    ..X.
    ..X.
    Dogman 42.86%
    Loudy 14.29%
    Apples 14.29%
    Miller 0.00%
    Invalid 28.57%
    2 4 10
    Loudy
    Apples
    Dogman
    Miller
    X………………..
    X…………………..
    X………………
    X………………….
    X…………..
    x………………………..
    X……………….
    X……………
    X..x
    xxxx
    Loudy 70.00%
    Apples 0.00%
    Dogman 0.00%
    Miller 0.00%
    Invalid 30.00%

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

    Решение

    Чтобы решить задачу создадим структуру с именами и результатами кандидатов. Сначала создадим массив кандидатов и заполним его. По вводу бюллетеней будем проверять не испорчены ли они. Если кроме «X» есть любой другой символ, или буква, или еще символы «X», то бюллетень испорчен, в остальных случаях он не испорчен. Если он не испорчен, добавляем к результату кандидата единицу, если нет — добавляем к счетчику испорченых бюллетеней единицу. Выводим в процентном соотношении с количеством бюллетеней результат каждого кандидата и количество испорченых бюллетеней.

    Ссылки

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

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

    e-olymp 972. Сортировка времени

    Задача

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

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

    Сначала задано число $n\, \left ( 1\leqslant n\leqslant 100 \right )$, а затем n моментов времени. Каждый момент времени задается 3 целыми числами — часы (от 0 до 23), минуты (от 0 до 60) и секунды (от 0 до 60)

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

    Выведите моменты времени, упорядоченные в порядке неубывания (момент времени также выводится в виде трех чисел, ведущие нули выводить не нужно)

    Тесты

    Входные данные Выходные данные
    1 [latex]\begin{matrix}
    4 & & \\
    10 &20 &30 \\
    7 &30 &00 \\
    23&59 &59 \\
    13&30 &30
    \end{matrix}[/latex]
    [latex]\begin{matrix}
    7 & 30 &00 \\
    10&20 &30 \\
    13&30 &30 \\
    23& 59 & 59
    \end{matrix}[/latex]
    2 $\begin{matrix}
    6\\
    12 &55 &59 \\
    8 &33 &34 \\
    6 &56 &46 \\
    10 &23 &52 \\
    3 &20 &00 \\
    19 &31 &0\\
    10&23&52
    \end{matrix}$
    $\begin{matrix}
    3 &20 &0 \\
    6 &56 &46 \\
    8 &33 &34 \\
    10 &23 &52 \\
    12 &55 &59 \\
    19 &31 &0
    \end{matrix}$

    Решение

    Создадим 4 массива где мы будем хранить время(отдельно часы, минуты, секунды), а также четвертый в котором мы будем хранить все время в одной удобной для нас единице измерения — секундах. Читаем поток ввода и переводим полученные данные, сравниваем их потом сортируем полученные результаты и выводим ответ.

    Ссылки

    e-olymp
    ideone

    e-olymp-751. Клад

    Условие

    Найти закопанный пиратами клад просто: всё, что для этого нужно – это карта. Как известно, пираты обычно рисуют карты от руки и описывают алгоритм нахождения клада так: «Встаньте около одинокой пальмы. Пройдите тридцать шагов в сторону леса, потом семнадцать шагов в сторону озера, …, наконец десять шагов в сторону большого булыжника. Клад находится под ним«. Большая часть таких указаний просто сводится к прохождению какого-то количества шагов в одном из восьми направлений ([latex]1[/latex] – север, [latex]2[/latex] – северо-восток, [latex]3[/latex]– восток, [latex]4[/latex] – юго-восток, [latex]5[/latex] – юг, [latex]6[/latex] – юго-запад, [latex]7[/latex] – запад, [latex]8[/latex] – северо-запад) (см. рис). Длина шага в любом направлении равна 1. Путешествие по такому пути обычно является прекрасным способом посмотреть окрестности, однако в наше время постоянной спешки ни у кого нет времени на это. Поэтому кладоискатели хотят идти напрямую в точку, где зарыт клад. Например, вместо того, чтобы проходить три шага на север, один шаг на восток, один шаг на север, три шага на восток, два шага на юг и один шаг на запад, можно пройти напрямую, использовав около 3.6 шага (см. рис).

    prb751

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

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

    Первая строка входного файла содержит число [latex]N[/latex] – число указаний $(1 ≤ N≤ 40)$. Последующие [latex]N[/latex] строк содержат сами указания – номер направления (целое число от 1 до 8) и количество шагов (целое число от 1 до 1000). Числа разделены пробелами.

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

    В выходной файл выведите координаты [latex]X[/latex] и [latex]Y[/latex] точки (два вещественных числа, разделённые пробелом), где зарыт клад, считая, что ось [latex]Ox[/latex] направлена на восток, а ось [latex]Oy[/latex] – на север. В начале кладоискатель должен стоять в начале координат. Координаты необходимо вывести с точностью [latex]10^{-3}[/latex].

    Тесты

    Ввод Вывод
    1 6
    1 3
    3 1
    1 1
    3 3
    5 2
    7 1
    3.000 2.000
    2 1
    8 10
    -7.071 7.071

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

    Решение

    Как видно из рисунка направление 1 совпадает с осью [latex]y[/latex], а 3 — с осью [latex]x[/latex]. Допустим, направление — переменная [latex]dir[/latex], а шаг-[latex]z[/latex]. Тогда, для направления 1 можно записать $y=z\cdot\cos((45^0)\cdot(dir — 1))$ , $x=z\cdot\sin((45^0)\cdot(dir-1)) $. Выражение $\cos((45^0)\cdot(1-1))=\cos(0^0)=1$ , то есть для 1 направления [latex]y=z[/latex], а выражение $\sin((45^0)\cdot(dir-1))=\sin((45^0)\cdot(1-1))=0 $. Следовательно, для направления 1 координаты [latex]y[/latex] и [latex]x[/latex] принимают значения: [latex]y=z[/latex], а [latex]x=0[/latex] .Рассмотрите значения приведенных выражений для всех направлений и увидим, что для всех направлений можно применить данные выражения для вычисления координат. А это позволяет сократить код программы.

    Ссылки

    e-olymp 8358. Среднее значение — 1

    Задача. Среднее значение — 1

    Проект «Средний вес школьника школы» решили выполнить Мамед с Самедом. Что они будут делать с этим числом, они не раскрывают. Они попросили взвеситься всех учеников школы и занесли результаты в таблицу. Помогите им подсчитать средний вес учеников. Но они просят, чтобы учеников с самым большим и с самым маленьким весом не учитывать. Единственное их упущение, они не подсчитали общее количество учеников, но это, конечно, не помешает вам подсчитать то, что они просят.

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

    В нескольких строках заданы веса учеников в килограммах, разделенных пробелами (одним или несколькими) или символом конца строки. Читать веса учеников до конца ввода.

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

    Средний вес учеников школы без учета учеников с самым большим и самым маленьким весом. Ответ выводить с точностью до килограмм.

    Тесты

    Ввод Вывод
    1 40 23 27 59 68 23 84 27 53 46 46
    2 21 22 23 24 25 26 27 28 20 30 29 25
    3 10 20 10 20 10 20 10 20 11 11
    4 60 45 70 90 55 62
    5 80 80 80 70 83 90 90 90 81
    6 50 90 70 70 70 70 70 70 70 70 74 70
    7 70 70 70 70 70 70 70 70 70 70 70 70 70 60 50 90 69

    Решение

    Считываем все числа, считаем их количество и сумму. Затем из количества вычитаем количество минимальных и максимальных значений, а из суммы их соответственные произведения на эти числа.

    Код через потоковую обработку

    Код через vector

    Код через map

    e-olymp 497. Лентяй

    Задача

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

    Входные данные:
    Первая строка содержит количество тестов. Каждый тест состоит из количество предметов $n$ $(1 \le n \le 100)$, которые нужно сдать Валере. Далее идет $n$ строк, каждая из которых состоит из двух чисел $a$ и $b$ $(1 \le a \le b \le 31)$, задающих интервал работы очередного преподавателя.

    Выходные данные:
    Для каждого теста вывести в отдельной строке "YES" если возможно встретить всех преподавателей за один день, или "NO", если это невозможно.

    Тесты

    Входные данные Вывод программы
    2
    1
    1 2
    2
    1 2
    3 4
    YES
    NO
    1
    1
    5 6
    YES
    2
    2
    1 4
    7 9
    3
    1 30
    2 5
    5 10
    NO
    YES

    Continue reading

    e-olymp 928. Сумма наибольшего и наименьшего

    Задача

    Задан массив целых чисел. Определить сумму наименьшего и наибольшего элементов массива.

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

    В первой строке задано количество элементов массива [latex]n[/latex] ([latex]n \leq 100[/latex]). Во второй строке заданы [latex]n[/latex] элементов массива, значение каждого из которых по модулю не превышает [latex]100[/latex].

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

    Вывести сумму наименьшего и наибольшего элементов массива.

    Тесты

    # ВХОДНЫЕ ДАННЫЕ  ВЫХОДНЫЕ ДАННЫЕ
    1 4
    1 2 3 4
    5
    2 5
    2 4 6 8 5
    10
    3 6
    6 2 4 5 7 9
    11
    4 7
    7 5 4 6 8 16 1
    17
    5 5
    16 20 65 34 86
    102

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

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

    Для решения задачи достаточно воспользоваться условными операторами внутри цикла. В данном цикле проверяем каждое число из заданного массива на минимум и максимум. Затем суммируем переменные.

    Ссылки

    e-olymp 2375. Квартира

    Задача

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

    • общую площадь комнат;
    • общую площадь всех спален;
    • стоимость квартиры.

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

    Первая строка содержит два целых числа [latex]n [/latex] [latex](1 \leqslant n \leqslant 10)[/latex] и [latex]c[/latex] [latex](1 \leqslant c \leqslant 100000)[/latex] — количество комнат в квартире и стоимость квадратного метра соответственно. Каждая из следующих [latex]n[/latex] строк содержит целое число [latex]a_i (1 \leqslant a_i \leqslant 100)[/latex] и слово [latex]t_i[/latex] — площадь [latex]i[/latex]-ой комнаты и ее тип соответственно. Слово [latex]t_i[/latex] может содержать только одно из следующих значений: [latex] «bedroom»[/latex], [latex] «bathroom»[/latex], [latex] «kitchen»[/latex], [latex] «balcony»[/latex], [latex] «other»[/latex].

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

    Первая строка содержит одно целое число — общую площадь всех комнат квартиры. Вторая строка содержит одно целое число — общую площадь всех спален в квартире. Третья строка содержит одно действительное число — стоимость квартиры с точностью не больше [latex]10^{-6}[/latex].

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

    Тесты

    Входные данные Выходные данные
    1 6 75000 46
    8 other 16
    3 bathroom 3187500.000000
    2 bathroom
    10 kitchen
    16 bedroom
    7 balcony
    2 2 75123 25
    10 kitchen 0
    15 balcony 1314652.500000
    3 4 110000 41
    7 other 18
    4 bathroom 4510000.000000
    12 kitchen
    18 bedroom

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

    Считываем данные из потока. При этом используем цикл for(int i=1; i=n; i++). Общую площадь квартиры рассчитываем по формуле S += ai. Площадь спален вычисляем по формуле Ss += ai, учитывая, что ti=="bedroom". Для дальнейшего вычисления стоимости квартиры вычисляем площадь балконов по формуле Sb += ai, учитывая, что ti=="balcony". Стоимость квартиры рассчитываем по формуле Ck=(S-Sb/2.)*c.

    Ссылки

    e-olymp
    ideone

    e-olymp 909. Количество слов

    Задача

    Определить количество слов в заданном фрагменте текста.

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

    В одной строке задан фрагмент текста на английском языке, количество символов в котором не превышает 250. Гарантируется, что в тексте отсутствуют тире, дефисы, цифры и числа.

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

    Вывести количество слов в фрагменте текста.

    Тесты

    Ввод Вывод
    1 Hello world! 2
    2 Hello world! Hello,     country! 4
    3 What do you think?.. 4
    4 How are you? 3
    5 Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it. 43

    Код. Вариант 1

    Код. Вариант 2

    Решение

    Считаем текст до пробела как слово. При помощи цикла while считываем по слову пока в потоке есть текст. И подсчитываем количество слов, используя счётчик count.

    Ссылки

    e-olymp 913. Используй подпрограмму

    Задача

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

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

    В первой строке задано натуральное число $n$ — количество пар чисел. В последующих $n$ строках через пробел задано по $2$ вещественных числа. Все входные данные по модулю не превышают $100$.

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

    В $n$ строках вывести через пробел по два числа: сначала сумму, а потом произведение очередной пары чисел. Результат выводить с точностью $4$ знака после десятичной точки.

    Тесты

    # Входные данные Выходные данные
    1 2
    6 7.5
    2.1 2.0
    13.5000 45.0000
    4.1000 4.2000
    2 4
    2 5
    3 5
    4 5
    5 5
    7.0000 10.0000
    8.0000 15.0000
    9.0000 20.0000
    10.0000 25.0000
    3 2
    100 100
    56 65
    200.0000 10000.0000
    121.0000 3640.0000
    4 6
    10 10
    20 20
    40 40
    50 50
    70 70
    80 80
    20.0000 100.0000
    40.0000 400.0000
    80.0000 1600.0000
    100.0000 2500.0000
    140.0000 4900.0000
    160.0000 6400.0000
    5 1
    2 2
    4 4

    Решение

    Как и было указано в условии задачи, при решении задачи использовалась подпрограмма $SumDob$, которая возвращает сумму и произведение двух вещественных чисел $a$ и $b$. Потом мы с помощью цикла выводим пару чисел, полученных из подпрограммы $SumDob$ $n$ раз с $n$ пар введенных значений.

    Условие задачи можно найти на e-olymp
    Код решения — ideone

    e-olymp 518. Сумма двух

    Задача

    Найти сумму двух чисел.

    Входные данные
    Первая строка содержит количество тестов [latex]t (1\leq t\leq 100)[/latex]. Каждый тест состоит из двух целых чисел [latex]a[/latex] и [latex]b[/latex].

    Выходные данные
    Для каждого теста вывести в отдельной строке сумму чисел [latex]a[/latex] и [latex]b[/latex].

    Тесты

    Ввод Вывод
    1 3

    2 3

    17 -18

    5 6

    5

    -1

    11

    Код

    Решение

    Считываем количество тестов, в цикле считаем каждый тест и выводим ответы.

    Ссылки

    e-olymp 910. Среднее арифметическое положительных

    Задача

    Задана последовательность вещественных чисел. Найти среднее арифметическое положительных чисел.

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

    В первой строке задано количество чисел $n$ ($0 < n ≤ 100$). В следующей строке заданы $n$ действительных чисел, значения которых не превосходят по модулю $100$.

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

    Вывести среднее арифметическое положительных чисел с двумя десятичными знаками. В случае отсутствия положительных чисел вывести сообщение $Not$ $Found$.

    Тесты

    Входные данные Выходные данные
    3
    5.2 -2 4
    4.60
    3
    -5.2 -2 -4
    Not Found
    5
    16 -78 56 1 -3
    24.33
    1
    17.33
    17.33
    1
    -17.33
    Not Found

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

    Решение

    В начале читаем из потока общее количество чисел n . Затем с помощью цикла остальные числа, одновременно проверяя положительные ли они. Если число положительное, то прибавляем его к общей сумме и увеличиваем счетчик k++ . В конце s!=0 означает, что в потоке есть хотя бы одно положительное число — тогда мы высчитываем и выводим $\frac{s}{k}$ с двумя знаками после запятой. В противном случае — $Not$ $Found$.

    Код программы (Тернарная операция)

    Решение

    Для вывода ответа с помощью тернарной операции необходимо, чтобы выходные данные были одного типа. Используем метод to_string, предварительно округлив $s$ до двух знаков после запятой. Так как при использовании метода  double переводится с шестью знаками после запятой, то используем erase, чтобы удалить лишние четыре.

    Ссылки

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

    Код программы на IdeOne (1)

    Код программы на IdeOne (2)

     

    e-olymp 919. Номер на 3

    Задача

    Условие

    Задана последовательность действительных чисел $a_{1}$, $a_{2}$,…, $a_{n}$. Определить сумму и количество положительных элементов, индексы которых делятся на $3$ без остатка.

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

    В первой строке задано количество элементов $n$ ($n \leq 100$) в последовательности. В следующей строке находится $n$ вещественных чисел, значение каждого из которых по модулю не превышает $100$.

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

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

    Тесты

    Входные данные Выходные данные
    1 6
    6 7.5 2.1 2.0 0 -3
    1 2.10
    2 3
    12 0.33 -14
    0 0.00
    3 1
    -3.4
    0 0.00
    4 12
    0 15.3 -1 144 0.333 17.5 -69 456 2.5 0 3 13
    3 33.00

    Решение

    Для решения этой задачи необходимо просмотреть все элементы последовательности и выбрать из них те, номера которых кратны трём, а сами элементы положительны. Далее вычисляем количество таких чисел и их сумму.
    В данной реализации используются цикл и условный оператор. Также необходимо задать точность. Для этого используем функцию setprecision().

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

    Ссылки

    e-olymp 927. Количество игрушек

    Задача

    Задано количество видов игрушек в магазине, количество игрушек каждого вида и стоимость игрушки каждого вида. Определить количество игрушек, стоимость которых меньше $50$ грн.

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

    В первой строке задано количество наличных в прейскуранте видов игрушек $n$ $(0 ≤ n ≤ 1000)$. В следующих $n$ строках задано по $2$ числа через пробел: сначала количество игрушек $a$ $(0 ≤ a ≤ 1000)$ очередного вида и их цена $b$ $(0 < b ≤ 10000)$ в грн.

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

    Вывести количество игрушек, стоимость которых меньше $50$ грн.

    Тесты

    Входные данные Выходные данные
    1 3
    2  100.00
    5  23.00
    10  22.50
    15
    2 3
    2 10.00
    5 2355.00
    6 22.50
    8
    3 4
    2 15.00
    13 2355.00
    10 22.50
    1 49.00
    13
    4 2
    2 15.00
    13 51.00
    2
    5 3
    3  100.00
    5  230.00
    7  220.50
    0

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

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

    Если цена за игрушку меньше 50 грн, то вся партия этого вида игрушек удовлетворяет условию.
    Считаем количество игрушек во всех таких партиях.

    Ссылки

    e-olimp 8596. Путешествие с запада на восток

    Задача

    Есть $n$ городов, стоящих на прямой с запада на восток. Города пронумерованы от $1$ до $n$, в порядке с запада на восток. Каждая точка на прямой имеет свою одномерную координату, и точка ближе к востоку имеет большую координату. Координата $i$-го города — $x_i$.

    Сейчас Вы находитесь в $1$ городе, и хотите посетить все города. У вас есть два способа путешествовать:

    • Ходить по прямой. При этом ваш уровень усталости будет увеличиваться на $a$ единиц каждый раз, когда Вы будете перемещаться на расстояние $1$, независимо от направления.
    • Телепортироваться в любую точку, которую хотите. Ваш уровень усталости будет увеличиваться на $b$ единиц, независимо от телепортированного расстояния.

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

    Первая строка содержит три числа $n (2 \leqslant n \leqslant 10^5)$, $a$ и $b (1 \leqslant a, b \leqslant 10^9)$. Следующая строка содержит $n$ целых чисел $x_1, x_2, … , x_n (1 \leqslant x_i \leqslant 10^9)$. Для всех $i (1 \leqslant i \leqslant n-1)$ имеет место неравенство $x_i <x_{i+1}$

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

    Выведите минимально возможный уровень усталости, при котором вы посетите все города.

    Решение

    Наименьший уровень усталости набирается при кратчайшем пути через все города — последовательном посещении всех городов по порядку и использовании оптимального способа передвижения. Для выбора способа передвижения мы считаем расстояние между следующим пунктом путешествия и нашим нынешним местоположением — $x_{i+1}-x_i$ ($1 \leqslant i \leqslant n-1$). После этого мы сравниваем прибавку к уровню усталости при переходе между городами — $(x_{i+1}-x_i) · a$ и при телепортации $b$, после чего прибавляем меньшее значение к нынешнему уровню усталости.

    Тесты

    Ввод Вывод
    1 4 2 5

    1 2 5 7

    11
    2 7 1 100

    40 43 45 105 108 115 124

    84
    3 7 1 2

    24 35 40 68 72 99 103

    12
    4 5 6 30

    100 104 105 192 201

    90

     

    Код

    Ссылки

     

    e-olymp 407. Обмін

    Задача

    У різдвяний вечір у віконці стояло три квіточки, зліва на право: герань, крокус та фіалка. Кожен ранок Маша витирала віконце і міняла містами стоявшу праворуч квіточку з центральною кввточкою. А Таня кожен вечір поливала квіточки і міняла місцями ліву та центральну квіточку. Потрібно визначити порядок квітів вночі після того, як пройде $k$ днів.

    Вхідні дані

    Перший рядок містить кількість тестів $t$ [latex](1 \leq t \leq 12)[/latex]. В кожному з наступних $t$ рядків знаходиться кількість днів $k$ [latex](k \leq 1000)[/latex].

    Вихідні дані

    Вивести $t$ рядків, що містять по три латинських літери: «G», «C» и «V» (великі літери без пропусків), які описують порядок квітів на вікні по закінченню $k$ днів (зліва направо). Позначення: G – герань, C – крокус, V – фіалка.

    Тести

    Вхідні дані Вихідні дані
    1 2
    1
    5
    VGC
    CVG
    2 6
    1
    2
    3
    4
    5
    6
    VGC
    CVG
    GCV
    VGC
    CVG
    GCV
    3 3
    3
    6
    9
    GCV
    GCV
    GCV

     

    Код програми

    Розв’язок

    Якщо кожного вечора звертати увагу на те, як Маша і Таня міняють місцями квіти, то можна помітити, що їх перестановки періодично повторюються кожні три дні. Цим я скористався для розв’язку задачі. Достатньо лише задати ці три перестановки і брати залишок від ділення на три для визначення конкретної.

    Посилання

    e-olymp
    ideone.com

    e-olymp 908. Те, что делятся на 6

    Задача: Те, что делятся на 6

    Для [latex]N[/latex] целых чисел определить сумму и количество положительных чисел, которые делятся на 6 без остатка.

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

    В первой строке задано количество чисел [latex]N[/latex]$\left(1 \leq N \leq 100\right)$, в следующей строке через пробел заданы сами числа, значения которых по модулю не превышают $10000$.

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

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

    Тесты

    Ввод Вывод

    3

    12 15 18

    2 30
    4

    -10 -15 42 -24

    1 42
    2

    6 0

    1 6
    3

    -6 -12 -32

    0 0

    Решение

    Заводим 2 переменные: сумму и количество. Каждый раз, когда мы читаем число, проверяем положительно ли оно и делится ли на 6 (Обычно желательно сначала проверять наимение вероятное условие, т.к. программа реже будет лишний раз проверять второе условие и, как следствие, сделает меньше действий, но в этой задачи это особой роли не играет из-за малого ввода), если оба условия выполняются, добавляем к счетчику 1, а к сумме введенное число. По окончанию ввода выводим сумму и количество через пробел.

    Ссылки

    e-olymp 1509. Раздел королевства.

    Задача


    Король страны Геометрии в заботах. У него есть три сына, которые постоянно ссорятся. Король применял разные методы примерения, но все напрасно. И это его очень беспокоило.

    «А что если разделить королевство?» подумал король. Он пригласил советников и описал свой план. Король открыл карту.

    Королевство имеет форму треугольника с вершинами [latex]A, B, C[/latex]. Король провел линию от [latex]B[/latex] к [latex]E[/latex] ([latex]E[/latex] — произвольная точка на отрезке [latex]AC[/latex]) и линию от [latex]C[/latex] к [latex]F [/latex]([latex]F[/latex] — произвольная точка на отрезке [latex]AB[/latex]). Пересечение [latex]BE[/latex] и [latex]CF[/latex] обозначено через [latex]X[/latex].

    Теперь образовалось четыре части — [latex]a[/latex] (треугольник [latex]BFX[/latex]), [latex]b[/latex] (треугольник [latex]BCX[/latex]), [latex]c[/latex] (треугольник [latex]CEX[/latex]) и [latex]d[/latex] (четырехугольник [latex]AEXF[/latex]). Король решил отдать области[latex] a[/latex], [latex]b[/latex], [latex]c[/latex] трем сыновьям. А область [latex]d[/latex] станет новым королевством.

    Вы — главный советник. Король сообщает Вам значения [latex]a, b, c[/latex]. Вам необходимо найти значение [latex]d[/latex]. Если его найти невозможно, то сообщить об этом.

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

    Состоит из не более чем [latex]1000[/latex] тестов. Каждый тест содержит три неотрицательных действительных числа [latex]a[/latex], [latex]b[/latex], [latex]c[/latex] (разделенных пробелом). Входные данные заканчиваются тестом у которого [latex]a = -1[/latex] и он не обрабатывается.

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

    Для каждого теста вывести его номер, начиная с [latex]1[/latex]. В следующей строке вывести [latex]d[/latex] (величина области королевства после раздела) округленное до [latex]4[/latex] десятичных знаков или ‘Poor King!’ (без кавычек) если значение [latex]d[/latex] определить невозможно. Формат выходных данных показан в примере.

    Тесты

    Входные данные Выходные данные
    1 1 2 1 Set 1:
    2.0000
    2 2 4 2 Set 2:
    4.0000
    3 1 3 3 Set 3:
    5.0000
    4 -1 0 0

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


     

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


    Для решения задачи соединим точки  [latex]F[/latex] и [latex]E[/latex] линией. Получили два треугольника: [latex]d1[/latex] и [latex]d2[/latex]. Искомую площадь [latex]d[/latex] будем искать как сумму площадей [latex]d1[/latex] и [latex]d2[/latex]. Треугольники [latex]BFO[/latex] и [latex]EFO[/latex] имеют общее основание [latex]FO[/latex]. Следовательно их площади [latex]d1[/latex] и [latex]a[/latex] относятся как высоты, опущенные из вершин [latex]E[/latex] и [latex]B[/latex] на прямую [latex]FO[/latex]. Аналогично треугольники [latex]BCO[/latex] и [latex]ECO[/latex] имеют общее основание [latex]OF[/latex]. Значит их площади [latex]c[/latex] и [latex]b[/latex] относятся как высоты, опущенные из вершин [latex]E[/latex] и [latex]B[/latex] на прямую [latex]CO[/latex]. То есть $\frac{d_1}{a}=\frac{c}{b}$. Отсюда $d_1=\frac{ac}{b}$. Теперь рассмотрим треугольники [latex]CAF[/latex] и [latex]CBF[/latex] с основаниями [latex]AF[/latex] и [latex]BF[/latex]. Они имеют одинаковую высоту, опущенную из вершины [latex]С[/latex] на прямую [latex]AB[/latex]. Следовательно площади этих треугольников относятся как длины сторон [latex]AF[/latex] и [latex]BF[/latex]. Аналогично треугольники [latex]EAF[/latex] и [latex]EBF[/latex] имеют основания [latex]AF[/latex] и [latex]BF[/latex]. Они имеют одинаковую высоту, опущенную из вершины [latex]E[/latex] на прямую [latex]AB[/latex]. Площади этих треугольников относятся как длины сторон [latex]AF[/latex] и [latex]BF[/latex]. Тогда $$\frac{AF}{BF}=\frac{S_{\blacktriangle} CAF}{S\blacktriangle CBF}=\frac{c+d_1+d_2}{a+b}$$. $$\frac{AF}{BF}=\frac{S\blacktriangle EAF}{S\blacktriangle EBF}=\frac{d_2}{a+d_1}$$. Следовательно $\frac{c+d_1+d_2}{a+b}=\frac{d_2}{a+d_1}$. Поскольку [latex]d1[/latex] уже найдено, то имеем равенство с одним неизвестным [latex]d2[/latex] : $$d_2=\frac{(c+d_1)(a+d_1)}{b-d_1}$$. Если [latex]b \leqslant d1[/latex], то решения не существует.

    Ссылки

    • Условие задачи на e-olymp
    • Код программы на ideone