Редакция для Контрольная сумма пакета
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. Идея
Нужно прочитать строку и посчитать сумму кодов всех её символов.
Для каждого символа существует числовой ASCII-код. Если пройти по строке слева направо и прибавить код каждого символа к ответу, то получится искомая контрольная сумма.
2. Наблюдения
- В задаче дана одна строка, причём в ней могут быть пробелы.
- Значит, строку нужно считывать целиком, а не по словам.
- Для символа:
- в C++ его код можно добавить как числовое значение
char; - в Python код символа получается через
ord(ch).
- в C++ его код можно добавить как числовое значение
- Длина строки до
200000, поэтому нужен линейный проход по строке. - Сумма может быть довольно большой, поэтому в C++ лучше использовать тип
long long.
3. Алгоритм
- Считать всю строку целиком.
- Завести переменную
sum = 0. - Для каждого символа строки:
- получить его ASCII-код;
- прибавить этот код к
sum.
- Вывести
sum.
4. Почему это работает
Контрольная сумма по условию определяется как сумма ASCII-кодов всех символов строки.
Алгоритм ровно это и делает:
- рассматривает каждый символ строки по одному разу;
- для каждого символа добавляет его код в общую сумму.
После обработки всех символов в переменной sum будет сумма кодов всех символов строки, то есть именно требуемая контрольная сумма.
5. Сложность
Пусть длина строки равна n.
- Время:
O(n), потому что строка проходится один раз. - Память:
O(1), если не считать память на хранение самой строки.
6. Код на C++17
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
getline(cin, s);
long long sum = 0;
for (char c : s) {
sum += (unsigned char)c;
}
cout << sum << '\n';
return 0;
}
7. Код на Python 3
s = input()
total = 0
for ch in s:
total += ord(ch)
print(total)
Комментарии