Os capacitores são famosos por serem fabricados com altas tolerâncias. Isso é aceitável em muitos casos, mas algumas vezes é necessária uma capacidade com tolerâncias rígidas. Uma estratégia comum para obter uma capacidade com o valor exato de que você precisa é usar dois capacitores cuidadosamente medidos em paralelo, para que suas capacidades correspondam a algo na faixa necessária.
O objetivo deste desafio é, dado um (multi) conjunto de capacidades, emparelhar os capacitores de modo que a capacidade total de cada par esteja em um determinado intervalo. Você também precisa encontrar o melhor conjunto de pares, ou seja, o conjunto de pares, para que o maior número possível de pares seja encontrado.
Restrições
- A entrada compreende em um formato de escolha
- uma lista não ordenada de capacidades que representa o (multi) conjunto de capacitores que você possui
- um par de capacidades representando o limite inferior e superior do intervalo de destino (inclusive)
- todas as capacidades na entrada são números inteiros positivos menores que 2 30 , a unidade é pF (não é o que importa).
- Além da lista de capacidades na entrada, o conjunto de capacitores que você possui também contém uma quantidade infinita de capacitores com um valor de 0 pF.
- A saída compreende em um formato de escolha uma lista de pares de capacidades, de modo que a soma de cada par esteja no intervalo de destino especificado. Nem a ordem dos pares nem a ordem das capacidades dentro de um par são especificadas.
- Nenhuma capacidade na saída pode aparecer com mais frequência do que aparece no conjunto de capacitores que você possui . Em outras palavras: Os pares que você produz não devem se sobrepor.
- Não deve haver saída possível que satisfaça as condições 4 e 5 que contenham mais pares de capacidades do que a saída produzida pelo seu programa.
- Seu programa será encerrado em O ( n !) Tempo em que n é o comprimento da lista que representa o conjunto de capacitores que você possui
- As brechas não devem ser abusadas
- O intervalo alvo não deve estar vazio
Pontuação
Sua pontuação é o comprimento da sua solução em octetos. Se sua solução conseguir resolver esse problema no tempo polinomial O ( n k ) por algum k , divida sua pontuação por 10. Não sei se isso é realmente possível.
Entrada de amostra
faixa de 100 a 100, matriz de entrada
100 100 100
, saída válida:0 100 0 100 0 100
faixa de 100 a 120, matriz de entrada
20 80 100
, saída válida:0 100 20 80
a saída
20 100
não é válidafaixa de 90 a 100, matriz de entrada
50 20 40 90 80 30 60 70 40
, saída válida:0 90 20 80 30 70 40 60 40 50
faixa de 90 a 90, matriz de entrada
20 30 40 40 50 60 70 80 90
, saída válida:0 90 20 70 30 60 40 50
faixa de 90 a 110, matriz de entrada
40 60 50
, saída válida:40 60
a <= b <= c <= d
que a + d, a + c, b + d
estão dentro do intervalo, mas b + c
não o é, mas isso dá uma contradição.