Maximização de XOR em Pares Fortes
Dado um conjunto de inteiros, um par é definido como "forte" se a diferença absoluta entre seus elementos for menor ou igual ao menor valor do par, ou seja, |x - y| <= min(x, y). O objetivo é encontrar o valor máximo da operação de bit a bit XOR (OU exclusivo) entre quaisquer dois elementos que formem um par forte. É permitido utilizar o mesmo elemento duas vezes para formar o par.
Uma abordagem direta para resovler este problema é verificar todas as combinações possíveis de pares dentro do array. Para cada par, validamos a condição de par forte e, caso seja verdadeira, comparamos e atualizamos o valor máximo de XOR encontrado até o momento.
def max_xor_pares_fortes(valores):
max_xor = 0
qtd = len(valores)
for i in range(qtd):
for j in range(i, qtd):
x, y = valores[i], valores[j]
if abs(x - y) <= min(x, y):
max_xor = max(max_xor, x ^ y)
return max_xor
Identificação de Funcionários com Acessos Frequentes
Com base em um registro de acessos contendo nomes de funcionários e seus respectivos horários (no formato "HHMM"), o desafio é identificar aqueles que acessaram o sistema três ou mais vezes dentro de uma janela de tempo estritamente menor que uma hora. Na representação numérica inteira do horário, isso significa que a diferença entre o horário mais tardio e o mais antigo da janela deve ser inferior a 100.
A estratégia eficiente consiste em agrupar os horários por funcionário e ordená-los cronologicamente. Um erro comum ao implementar uma janela deslizante convencional é reposicionar o ponteiro de início da janela de forma agressiva. Por exemplo, ao avaliar os horários 0010, 0040 e 0120, ao detectar que 0120 excede a janela de 0010, reposicionar o início para 0120 ignora que 0040 e 0120 ainda formam uma janela válida.
Para evitar essa armadilha lógica, a solução ideal é verificar janelas fixas de tamanho 3. Se o terceiro acesso consecutivo na lista ordenada estiver a menos de 100 uniaddes de tempo do primeiro acesso dessa sequência, o funcionário é classificado como de alto acesso.
from collections import defaultdict
def encontrar_acessos_elevados(registros):
historico = defaultdict(list)
for usuario, hora_str in registros:
historico[usuario].append(int(hora_str))
alto_acesso = []
for usuario, horas in historico.items():
if len(horas) < 3:
continue
horas.sort()
for i in range(len(horas) - 2):
if horas[i + 2] - horas[i] < 100:
alto_acesso.append(usuario)
break
return alto_acesso