Редакция для Поэлементная сумма
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.
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. Наблюдения
Для каждого индекса ответ считается независимо от остальных:
- ответ для дня
iравенa[i] + b[i].
- ответ для дня
Никаких сложных структур данных не требуется:
- достаточно прочитать оба массива;
- пройти по индексам от
0доn - 1; - для каждого индекса сложить соответствующие элементы.
По условию значения ответа могут не поместиться в 32-битный тип, поэтому:
- в C++ нужно использовать
long long; - в Python это не проблема, так как
intподдерживает большие числа.
- в C++ нужно использовать
3. Алгоритм
- Считать число
n. - Считать массив
aизnчисел. - Считать массив
bизnчисел. - Создать массив
ans. - Для каждого
iот0доn - 1:- вычислить
a[i] + b[i], - добавить результат в
ans.
- вычислить
- Вывести элементы массива
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)
Комментарии