Kapasitor terkenal karena diproduksi dengan toleransi tinggi. Ini dapat diterima dalam banyak kasus, tetapi beberapa kali dibutuhkan kapasitas dengan toleransi yang ketat. Strategi umum untuk mendapatkan kapasitas dengan nilai persis yang Anda butuhkan adalah dengan menggunakan dua kapasitor yang diukur secara hati-hati secara paralel sehingga kapasitasnya bertambah hingga sesuatu dalam kisaran yang Anda butuhkan.
Sasaran dalam tantangan ini adalah, mengingat satu set (multi) kapasitas, untuk memasangkan kapasitor sedemikian sehingga total kapasitas masing-masing pasangan berada dalam kisaran yang diberikan. Anda juga perlu menemukan pasangan yang terbaik, yaitu pasangan yang dapat ditemukan sebanyak mungkin pasangan.
Kendala
- Input terdiri dari format pilihan
- daftar kapasitas unordered yang mewakili set (multi) kapasitor yang Anda miliki
- sepasang kapasitas yang mewakili batas bawah dan atas kisaran target (inklusif)
- semua kapasitas dalam input bilangan bulat positif lebih kecil dari 2 30 , unitnya adalah pF (bukan yang penting).
- Selain daftar kapasitas dalam input, set kapasitor yang Anda miliki juga berisi jumlah kapasitor yang tak terbatas dengan nilai 0 pF.
- Output terdiri dalam format pilihan daftar pasangan kapasitas sehingga jumlah masing-masing pasangan berada dalam kisaran target yang ditentukan. Baik urutan pasangan maupun urutan kapasitas dalam pasangan ditentukan.
- Tidak ada kapasitas dalam output yang mungkin muncul lebih sering daripada yang muncul di set kapasitor yang Anda miliki . Dengan kata lain: Pasangan yang Anda hasilkan tidak boleh tumpang tindih.
- Tidak akan ada kemungkinan hasil kondisi memuaskan 4 dan 5 yang mengandung lebih banyak pasangan kapasitas daripada output yang dihasilkan program Anda.
- Program Anda akan berakhir dalam waktu O ( n !) Di mana n adalah panjang daftar yang mewakili set kapasitor yang Anda miliki
- Celah tidak akan disalahgunakan
- Rentang target tidak boleh kosong
Mencetak gol
Skor Anda adalah panjang solusi Anda dalam oktet. Jika solusi Anda berhasil memecahkan masalah ini dalam polinomial waktu O ( n k ) untuk beberapa k , membagi skor dengan 10. Saya tidak tahu apakah ini sebenarnya mungkin.
Input sampel
kisaran 100 hingga 100, array input
100 100 100
, output yang valid:0 100 0 100 0 100
kisaran 100 hingga 120, array input
20 80 100
, output yang valid:0 100 20 80
outputnya
20 100
tidak validkisaran 90 hingga 100, input array
50 20 40 90 80 30 60 70 40
, output yang valid:0 90 20 80 30 70 40 60 40 50
kisaran 90 hingga 90, input array
20 30 40 40 50 60 70 80 90
, output yang valid:0 90 20 70 30 60 40 50
kisaran 90 hingga 110, input array
40 60 50
, output yang valid:40 60
a <= b <= c <= d
yanga + d, a + c, b + d
semuanya berada dalam jangkauan tetapib + c
tidak, tetapi itu memberikan kontradiksi.Jawaban:
CJam, 5.6
Ini adalah implementasi ulang langsung dari algoritma dalam jawaban orlp . Jika Anda memperbaiki jawaban saya, pastikan Anda juga memilih jawaban ini . Saya juga menyarankan bahwa jawaban dengan algoritma asli diterima, karena saya sangat ragu bahwa saya akan menemukan cara untuk menyelesaikan ini dengan elegan di O (n * log (n)).
Cobalah online
Input sampel:
Penjelasan:
sumber
Python 2, 11.5
Golf Python untuk sekali:
Saya menambahkan satu kapasitor 0 pF untuk setiap kapasitor biasa, tidak pernah ada lagi yang dibutuhkan. Kemudian kami menyortir kapasitor dan terus memasangkan kapasitor terendah dan tertinggi. Jika jumlahnya berada dalam rentang yang diizinkan, kami mencetaknya, jika itu di atas kisaran, kami membuang yang tertinggi, jika jumlahnya di bawah, buang yang terendah.
Contoh input / output:
sumber