Редакция для Контрольная сумма пакета


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. Идея

Нужно прочитать строку и посчитать сумму кодов всех её символов.

Для каждого символа существует числовой ASCII-код. Если пройти по строке слева направо и прибавить код каждого символа к ответу, то получится искомая контрольная сумма.

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

  • В задаче дана одна строка, причём в ней могут быть пробелы.
  • Значит, строку нужно считывать целиком, а не по словам.
  • Для символа:
    • в C++ его код можно добавить как числовое значение char;
    • в Python код символа получается через ord(ch).
  • Длина строки до 200000, поэтому нужен линейный проход по строке.
  • Сумма может быть довольно большой, поэтому в C++ лучше использовать тип long long.

3. Алгоритм

  1. Считать всю строку целиком.
  2. Завести переменную sum = 0.
  3. Для каждого символа строки:
    • получить его ASCII-код;
    • прибавить этот код к sum.
  4. Вывести 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)

Комментарии

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