Редакция для Поэлементная сумма


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

1. Идея

Даны два массива длины n:

  • a[i] — доход в i-й день,
  • b[i] — расход в i-й день.

Для каждого дня нужно найти сумму a[i] + b[i] и вывести все такие суммы по порядку.

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

2. Наблюдения

  1. Для каждого индекса ответ считается независимо от остальных:

    • ответ для дня i равен a[i] + b[i].
  2. Никаких сложных структур данных не требуется:

    • достаточно прочитать оба массива;
    • пройти по индексам от 0 до n - 1;
    • для каждого индекса сложить соответствующие элементы.
  3. По условию значения ответа могут не поместиться в 32-битный тип, поэтому:

    • в C++ нужно использовать long long;
    • в Python это не проблема, так как int поддерживает большие числа.

3. Алгоритм

  1. Считать число n.
  2. Считать массив a из n чисел.
  3. Считать массив b из n чисел.
  4. Создать массив ans.
  5. Для каждого i от 0 до n - 1:
    • вычислить a[i] + b[i],
    • добавить результат в ans.
  6. Вывести элементы массива ans через пробел.

4. Почему это работает

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

Если рассмотреть произвольный день с индексом i, то:

  • доход в этот день равен a[i],
  • расход в этот день равен b[i],
  • значит, искомое значение равно a[i] + b[i].

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

5. Сложность

Пусть длина массивов равна n.

  • Время работы: O(n), так как мы один раз проходим по массивам.
  • Дополнительная память: O(n) для массива ответов.

6. Код на C++17

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;

    vector<long long> a(n), b(n), ans(n);

    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    for (int i = 0; i < n; i++) {
        cin >> b[i];
    }

    for (int i = 0; i < n; i++) {
        ans[i] = a[i] + b[i];
    }

    for (int i = 0; i < n; i++) {
        if (i > 0) cout << ' ';
        cout << ans[i];
    }
    cout << '\n';

    return 0;
}

7. Код на Python 3

n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))

ans = []
for i in range(n):
    ans.append(a[i] + b[i])

print(*ans)

Комментарии

Еще нет ни одного комментария.