Рассмотрим обычное десятичное число, например, число 5623. Интуитивно понятно, что означают все эти цифры: (5 * 1000) + (6 * 100) + (2 * 10) + (3 * 1). Так как в десятичной системе счисления всего 10 цифр, то каждое значение умножается на множитель 10 в степени n. Выражение, приведенное выше, можно записать следующим образом: (5 * 103) + (6 * 102) + (2 * 101) + (3 * 1).
Двоичные числа работают по аналогичной схеме, за исключением того, что в системе всего 2 числа (0 и 1) и множитель не 10, а 2. Так же как запятые (или пробелы) используются для улучшения читабельности больших десятичных чисел (например, 1, 427, 435), двоичные числа пишутся группами — в каждой по 4 цифры (например, 1101 0101).
Объяснение:
import math
import sys
def get_first_max(tree, idx, l, r, L, R):
if r <= L or R <= l:
return -1
if l >= L and r <= R:
return tree[idx]
m = (l + r) // 2
return max(get_first_max(tree, idx * 2 + 1, l, m, L, R), get_first_max(tree, idx * 2 + 2, m, r, L, R))
num = input()
k = int(input())
n = len(num)
N = 2**math.ceil(math.log2(n))
M1 = 10 ** 7
M2 = 10 ** 6
tree = [-1] * (2 * N)
for i in range(n):
tree[N - 1 + i] = int(num[i]) * M1 + M2 - i
for i in range(N - 2, -1, -1):
tree[i] = max(tree[2 * i + 1], tree[2 * i + 2])
i = 0
ans = ""
for _ in range(n - k):
maximum = get_first_max(tree, 0, 0, N, i, i + k + 1)
val = maximum // M1
pos = M2 - maximum % M1
ans += str(val)
k -= pos - i
i = pos + 1
if k == 0:
ans += num[i:]
break
print(ans)
Объяснение:
Поделитесь своими знаниями, ответьте на вопрос:
Считая, что каждый символ кодируется одним байтом, определите, чему равен информационный объём следующего высказывания жан- жака руссо. тысячи путей ведут к заблуждению, к истине- только один. а) 92 бита б) 220 битов в) 456 битов г) 512 битов