e-olymp 4749. Выручка театра

Задача

В театре [latex]n[/latex] рядов по [latex]m[/latex] мест в каждом. Даны две матрицы — в первой записаны стоимости билетов. Вторая сообщает, какие билеты проданы, а какие — нет ([latex]1[/latex] — соответствующий билет продан, [latex]0[/latex] — не продан).
Определите общую выручку от спектакля.

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

Сначала записано число [latex]n[/latex], затем число [latex]m[/latex] ([latex]n[/latex], [latex]m \leqslant 500[/latex]). После задана матрица стоимостей билетов ([latex]n[/latex] строк по [latex]m[/latex] чисел, каждое из чисел от [latex]0[/latex] до [latex]10000[/latex]). Далее задана матрица проданных билетов — снова [latex]n[/latex] строк по [latex]m[/latex] чисел.

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

Выведите общую выручку от продажи билетов.

Тесты

Входные данные Выходные данные
1 3 3 25
1 2 3
4 5 6
7 8 9
1 0 1
0 1 0
1 0 1
2 2 2 0
1 1
2 2
0 0
0 0
3 4 5 380
15 16 17 18 19
19 18 17 16 15
19 20 21 22 23
23 22 21 20 19
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1

Код программы с использованием одномерных массивов

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

Описываем целочисленный одномерный массив x [500*500] для хранения матрицы стоимостей билетов. Описываем целочисленные переменные [latex]n[/latex] и [latex]m[/latex] (количество строк и столбцов матрицы) и считываем их. Описываем целочисленную переменную [latex]nm[/latex] (количество мест в зале) и инициализируем ее произведением [latex]n \cdot m[/latex]. Цикл инициализирует [latex]nm[/latex] элементов массива [latex]x[/latex]. Описываем целочисленную переменную [latex]k[/latex], которая принимает значения [latex]0[/latex] или [latex]1[/latex] (билет не продан или продан), и целочисленную переменную [latex]v[/latex] — стоимость проданных билетов ([latex]v[/latex] имеет тип long long int, так как максимальное значение, которое она может принять, составляет [latex]500 \cdot 500 \cdot 10000=2500000000[/latex]). Цикл считывает значения [latex]k[/latex] и увеличивает [latex]v[/latex] на k*x[i].

Код программы с использованием многомерных массивов

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

По условию заданы количество строк [latex]n[/latex] и количество столбцов [latex]m[/latex] матрицы стоимости театральных билетов ( [latex] n,m\leqslant 500[/latex], каждое из чисел от [latex]0[/latex] до [latex]10000[/latex] ). Описываем целочисленную матрицу x[500][500]. Объявляем целочисленные переменные [latex]n[/latex] и [latex]m[/latex] и вводим их значения с клавиатуры. Считываем матрицу x. Объявляем переменную unsigned long long v = 0 — стоимость проданных билетов. Целочисленная переменная [latex]p = 1[/latex], если билет на ( [latex]i,j[/latex] )-е место продан, и [latex]p = 0[/latex] — в противном случае. Во вложенных циклах считываем значение [latex]p[/latex] из матрицы проданных билетов. Проверяем [latex]p[/latex] на положительность и увеличиваем [latex]v[/latex] на стоимость билета на ( [latex]i,j[/latex] )-е место.

Ссылки

e-olymp
ideone (код с одномерными массивами)
ideone (код с многомерными массивами)

Related Images:

11 thoughts on “e-olymp 4749. Выручка театра

    • Николай, для вычисления стоимости всех проданных билетов необходимы элементы обеих матриц. Поэтому первую матрицу нужно считать и сохранять в двумерном массиве, а элементы из второй матрицы можно считывать и использовать одну целочисленную переменную.

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

    • Хотя и я могу быть не прав. В любом случае, придется дождаться Игоря Евгеньевича.

    • Богдан, максимальное значение стоимости всех проданных билетов равно [latex]500 \cdot 500 \cdot 10000 =2500000000[/latex], что [latex] \gt 2147483648 [/latex], являющегося максимальным значением типа [latex]int[/latex]. Поэтому я использовал [latex]double[/latex].

    • Если вам нужно использовать целочисленный большой тип, используйте unsigned long long, использование double там, где не требуется работа с дробными числами чревато ошибками при сравнении и накоплением погрешностей.
      Также double может неправильно выводиться через потоковый вывод. Вы можете ожидать вывод 10, а вывод double вернет 10.000000001, и тест не пройдет.

    • Андрей, спасибо Вам за комментарий! Вы правы. И, действительно, здесь правильнее использовать [latex]unsigned[/latex] [latex]long[/latex] [latex]long[/latex] вместо [latex]double[/latex].

    • Николай, спасибо за комментарий! Я уже исправил ошибку. И мой код проходит все тесты на e-olymp .

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