Редакция для Сумма всего массива
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 чеков, требуется посчитать общую выручку.
В условии упоминаются префиксные суммы: pre[i] — это сумма первых i элементов. Тогда ответ задачи — это pre[n], то есть сумма всех n чеков.
Но хранить весь массив префиксных сумм не нужно. Достаточно просто идти по элементам и поддерживать текущую сумму.
2. Наблюдения
- Ответ равен сумме всех чисел
a_1 + a_2 + ... + a_n. - Каждый новый чек просто добавляется к уже накопленной сумме.
- Из-за ограничений ответ может быть большим:
nдо2 * 10^5- каждый
a_iпо модулю до10^9
- Поэтому в C++ нужен тип
long long, а неint.
3. Алгоритм
- Считать число
n. - Завести переменную
sum = 0. nраз считать очередное числоxи прибавлять его кsum.- Вывести
sum.
4. Почему это работает
После чтения первого элемента sum равна сумме первого чека.
После чтения второго элемента sum равна сумме первых двух чеков.
И так далее: после чтения i элементов переменная sum хранит сумму этих i элементов, то есть текущую префиксную сумму.
Значит, после обработки всех n чисел переменная sum будет равна pre[n], а именно это и требуется вывести.
5. Сложность
- Время:
O(n), потому что каждый элемент обрабатывается ровно один раз. - Память:
- для решения на C++:
O(1), так как храним только текущую сумму и очередное число; - для приведённого решения на Python:
O(n), потому что сначала считывается список всех чисел.
- для решения на C++:
6. Код на C++17
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
long long sum = 0;
for (int i = 0; i < n; i++) {
long long x;
cin >> x;
sum += x;
}
cout << sum << "\n";
return 0;
}
7. Код на Python 3
n = int(input())
a = list(map(int, input().split()))
s = 0
for x in a:
s += x
print(s)
Комментарии