I condensatori sono noti per essere fabbricati con tolleranze elevate. Ciò è accettabile in molti casi, ma a volte è richiesta una capacità con tolleranze strette. Una strategia comune per ottenere una capacità con il valore esatto necessario è quella di utilizzare due condensatori attentamente misurati in parallelo in modo che le loro capacità si sommino a qualcosa nell'intervallo di cui hai bisogno.
L'obiettivo di questa sfida è, dato un (multi) set di capacità, accoppiare i condensatori in modo tale che la capacità totale di ciascuna coppia sia in un dato intervallo. È inoltre necessario trovare il miglior set di accoppiamenti, ovvero il set di accoppiamenti in modo tale da trovare quante più coppie possibili.
vincoli
- L'input comprende un formato a scelta
- un elenco non ordinato di capacità che rappresentano il (multi) set di condensatori che hai
- una coppia di capacità che rappresentano il limite inferiore e superiore dell'intervallo target (inclusivo)
- tutte le capacità in ingresso sono numeri interi positivi inferiori a 2 30 , l'unità è pF (non è quello che conta).
- Oltre all'elenco delle capacità in ingresso, l'insieme di condensatori che hai contiene anche una quantità infinita di condensatori con un valore di 0 pF.
- L'output comprende in un formato a scelta un elenco di coppie di capacità tali che la somma di ciascuna coppia sia nell'intervallo target specificato. Non viene specificato né l'ordine delle coppie né l'ordine delle capacità all'interno di una coppia.
- Nessuna capacità nell'output può apparire più spesso di quanto appaia nel set di condensatori che hai . In altre parole: le coppie che emetti non devono sovrapporsi.
- Non devono esserci output possibili che soddisfino le condizioni 4 e 5 che contengano più coppie di capacità rispetto all'output prodotto dal programma.
- Il programma terminerà tra O ( n !) Tempo in cui n è la lunghezza della lista che rappresenta l'insieme di condensatori che hai
- Le scappatoie non devono essere abusate
- L' intervallo target non deve essere vuoto
punteggio
Il tuo punteggio è la lunghezza della tua soluzione in ottetti. Se la tua soluzione riesce a risolvere questo problema nel tempo polinomiale O ( n k ) per qualche k , dividi il tuo punteggio per 10. Non so se questo sia effettivamente possibile.
Input di esempio
intervallo da 100 a 100, array di input
100 100 100
, output valido:0 100 0 100 0 100
intervallo da 100 a 120, array di input
20 80 100
, output valido:0 100 20 80
l'output
20 100
non è validointervallo da 90 a 100, array di input
50 20 40 90 80 30 60 70 40
, output valido:0 90 20 80 30 70 40 60 40 50
intervallo da 90 a 90, array di input
20 30 40 40 50 60 70 80 90
, output valido:0 90 20 70 30 60 40 50
intervallo da 90 a 110, array di input
40 60 50
, output valido:40 60
a <= b <= c <= d
tali che a + d, a + c, b + d
sono tutti nella gamma ma b + c
non lo sono, ma ciò dà una contraddizione.