В задаче Bitwise AND дано множество чисел \(S = \{1, 2, 3, ..., N\}\), нужно найти два числа \(A\) и \(B\) такие что значение \(A \& B\) (побитовый оператор И) наибольшее, но меньше заданного \(K\). Вывести наибольшее возможное \(A \& B\).
Ограничения:
\(2 \leq N \leq 10^3\)
\(2 \leq K \leq N\)
Решение
Решение с перебором рабочее, но не проходит по скорости: всего пар \(N * (N - 1)\), сложность получается \(O(n^2)\).
У этой задачи есть решение за константное время. Предположим число \(K\) нечётное. Это значит что в побитовой записи справа у него находится единица:
\(11_{10} = 1011_2\)
Рассмотрим \(K-1\), в двоичной записи все его цифры совпадают с \(K\) кроме последней в которой находится 0:
Полностью вести список задач в Saved messages неудобно, Telegram для этого не предназначен. Следовательно, если задачи скапливаются в Telegram то это уже второй (энный) список.
Главный принцип списка задач — список задач должен быть один. Накапливать задачи в Telegram нельзя. Остаётся рассматривать Saved messages как один из источников входящих, так же как почту.
Когда нет возможности записать задачу в основной список задач, удобно быстро отправить сообщение в Telegram. Чужие сообщения можно даже просто пересылать в Saved messages. Но отношение к ним должно быть как к входящим, а не как к задачам. Сообщения разбираются по обычным принципам и переносятся либо в список задач либо в информацию.
Информация
Ссылки и контакты относятся к кускам информации. Главный принцип её хранения — простой и быстрой поиск информации когда она нужна. Обычно, для этого информация хранится в структурированном виде. По проектам, областям, файлам или любым другим способом.
Как и для задач, Telegram не предоставляет возможностей для эффективного хранения информации. Поэтому работа с такими сообщениями такая же как с задачами: при разборе входящих куски информации из Saved messages сортируются и помещаются в наиболее подходящие места, в идеальном случае, в одну или несколько баз знаний.