Редакция для Скрытое сообщение


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

Нужно восстановить скрытое сообщение из строки, взяв символы на позициях 0, 2, 4, ....

То есть задача сводится к очень простому действию: пройти по строке с шагом 2 и собрать ответ из символов с чётными индексами.

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

  • В условии явно сказано, что нужно брать каждый второй символ, начиная с самого первого.
  • В программировании первый символ строки имеет индекс 0, поэтому нужны именно позиции 0, 2, 4, ....
  • Если длина строки нечётная, последний символ тоже может попасть в ответ.
  • Если длина строки равна 1, ответ совпадает с исходной строкой.
  • Никаких сложных преобразований делать не нужно: достаточно один раз пройти по строке.

3. Алгоритм

  1. Считать строку s.
  2. Создать пустую строку ans.
  3. Перебирать индексы i от 0 до len(s) - 1 с шагом 2.
  4. Добавлять s[i] в ans.
  5. Вывести ans.

В Python это можно сделать ещё короче с помощью среза s[::2], который как раз берёт элементы, начиная с нулевого, с шагом 2.

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

По условию скрытое сообщение состоит ровно из символов, стоящих на чётных позициях исходной строки.

Алгоритм перебирает именно такие индексы:

  • сначала 0,
  • потом 2,
  • потом 4,
  • и так далее, пока индекс не выйдет за границы строки.

Каждый нужный символ добавляется в ответ в правильном порядке, а все символы с нечётными индексами пропускаются.
Значит, в результате получается ровно та строка, которую требует задача.

5. Сложность

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

  • Время работы: O(n), потому что мы просматриваем примерно половину символов, а это всё равно линейная сложность.
  • Память: O(n), так как нужно сохранить строку-ответ.

6. Код на C++17

#include <iostream>
#include <string>

using namespace std;

int main() {
    string s;
    cin >> s;

    string ans;
    for (int i = 0; i < (int)s.size(); i += 2) {
        ans += s[i];
    }

    cout << ans << '\n';
    return 0;
}

7. Код на Python 3

s = input()
print(s[::2])

Комментарии

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