Редакция для Скрытое сообщение
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. Идея
Нужно восстановить скрытое сообщение из строки, взяв символы на позициях 0, 2, 4, ....
То есть задача сводится к очень простому действию: пройти по строке с шагом 2 и собрать ответ из символов с чётными индексами.
2. Наблюдения
- В условии явно сказано, что нужно брать каждый второй символ, начиная с самого первого.
- В программировании первый символ строки имеет индекс
0, поэтому нужны именно позиции0, 2, 4, .... - Если длина строки нечётная, последний символ тоже может попасть в ответ.
- Если длина строки равна
1, ответ совпадает с исходной строкой. - Никаких сложных преобразований делать не нужно: достаточно один раз пройти по строке.
3. Алгоритм
- Считать строку
s. - Создать пустую строку
ans. - Перебирать индексы
iот0доlen(s) - 1с шагом2. - Добавлять
s[i]вans. - Вывести
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])
Комментарии