Teka-teki pertama dari saya, saran untuk perbaikan diterima dengan senang hati!
Skenarionya adalah; Anda bekerja sebagai manajer untuk perusahaan arung jeram. Setiap pagi, Anda diberikan daftar pemesanan, dan Anda harus mengurutkannya menjadi muatan rakit. Tulis program atau fungsi dalam bahasa pilihan Anda yang melakukan ini untuk Anda.
Setiap rakit menampung maksimal n
klien, dan setiap pemesanan adalah untuk grup antara 1 dan n
orang (termasuk). Aturan berikut harus diperhatikan;
Tidak ada grup yang dapat dipisahkan. Jika mereka memesan bersama, mereka semua harus berada di rakit yang sama.
Jumlah rakit harus diminimalkan.
Tunduk pada dua aturan sebelumnya, kelompok-kelompok tersebut harus disebarkan sepadan mungkin di antara rakit.
Input
Jumlahnya n
(Anda dapat berasumsi bahwa ini adalah bilangan bulat positif), dan ukuran semua pemesanan. Ini bisa berupa susunan, daftar atau struktur data serupa jika bahasa Anda mendukung hal-hal seperti itu. Semua ini akan menjadi bilangan bulat positif antara 1 dan n
. Urutan pemesanan tidak ditentukan, juga tidak penting.
Keluaran. Daftar nomor pemesanan, dikelompokkan ke dalam muatan rakit. Pengelompokan harus ditunjukkan dengan jelas, seperti;
- daftar, atau array array.
- daftar yang dipisahkan koma untuk setiap rakit. Baris baru di antara setiap rakit.
Bagaimana Anda menerapkan aturan ketiga itu terserah Anda, tetapi ini bisa melibatkan menemukan hunian rakit rata-rata, dan meminimalkan penyimpangan dari itu sebanyak mungkin. Berikut ini beberapa test case.
n Bookings Output
6 [2,5] [5],[2]
4 [1,1,1,1,1] [1,1,1],[1,1]
6 [2,3,2] [2,2],[3]
6 [2,3,2,3] [2,3],[2,3]
6 [2,3,2,3,2] [2,2,2],[3,3]
12 [10,8,6,4,2] [10],[8,2],[6,4]
6 [4,4,4] [4],[4],[4]
12 [12,7,6,6] [12],[7],[6,6]
Aturan standar berlaku, kode terpendek menang. Selamat bersenang-senang!
Diedit; Cara yang disarankan untuk mendefinisikan sama sederajat mungkin untuk aturan ketiga.
Setelah jumlah rakit r
telah ditentukan (tunduk pada aturan kedua), hunian rata-rata a
dapat dihitung dengan menjumlahkan pemesanan, dan membaginya dengan r
. Untuk setiap rakit, penyimpangan dari hunian rata-rata dapat ditemukan menggunakan d(x) = abs(n(x)-a)
, di mana n(x)
jumlah orang di setiap rakit dan 1 <= x <= r
. Untuk beberapa fungsi kontinu, bernilai-tunggal f(y)
, yang benar-benar positif dan memiliki turunan kedua yang benar-benar positif pertama dan non-negatif untuk semua positif y
, kami mendefinisikan kuantitas non-negatif F
, sebagai jumlah dari semua f(d(x)), 1 <= x <= r
. Setiap pilihan alokasi rakit yang memenuhi dua aturan pertama, dan di mana F
sama dengan minimum global akan memenuhi aturan ketiga juga.
g(y) = y
(kedua turunan nol) atau g(y) = y²
(pertama menurunkan nol ketika y = 0
).