Benden ilk bulmaca, iyileştirme önerileri memnuniyetle aldı!
Senaryo; Bir beyaz su rafting şirketi için yönetici olarak çalışıyorsunuz. Her sabah, bir rezervasyon listesi verilir ve bunları sal yüklere ayırmanız gerekir. Seçtiğiniz dilde bunu sizin için yapan bir program veya işlev yazın.
Her sal en fazla n
müşteriye sahiptir ve her rezervasyon 1 ile n
kişi (dahil) arasındaki bir grup içindir . Aşağıdaki kurallara uyulmalıdır;
Hiçbir grup bölünemez. Birlikte rezervasyon yaptılarsa, hepsinin aynı salda olması gerekir.
Salların sayısı en aza indirilmelidir.
Yukarıdaki iki kurala bağlı olarak, gruplar sallar arasında olabildiğince eşit şekilde yayılmalıdır.
Girdiler.
Sayı n
(bunun pozitif bir tamsayı olduğunu varsayabilirsiniz) ve tüm rezervasyonların boyutu. Diliniz bu tür şeyleri destekliyorsa, bu bir dizi, liste veya benzer bir veri yapısı olabilir. Tüm bunlar 1 ile arasında pozitif tamsayılar olacaktır n
. Rezervasyonların sırası tanımlanmamıştır ve önemli değildir.
Çıktı. Sal yükleri olarak gruplandırılmış rezervasyon numaralarının listesi. Gruplama açık bir şekilde belirtilmelidir, örneğin;
- bir liste veya dizi dizisi.
- her bir sal için virgülle ayrılmış bir liste. Her sal arasında yeni satır.
Üçüncü kuralı nasıl uygulayacağınız size bağlıdır, ancak bu, ortalama sal doluluğunu bulmayı ve mümkün olduğunca sapmaları en aza indirmeyi içerebilir. İşte bazı test örnekleri.
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]
Standart kurallar geçerlidir, en kısa kod kazanır. İyi eğlenceler!
Düzenlenen; Üçüncü kural için mümkün olduğu kadar eşit tanımlamanın önerilen bir yolu .
Sal sayısı r
belirlendikten sonra (ikinci kurala tabi olarak), ortalama doluluk a
, rezervasyonlar toplanarak ve bölünerek hesaplanabilir r
. Her bir sal, ortalama doluluk sapma kullanılarak bulunabilir d(x) = abs(n(x)-a)
burada, n(x)
her bir sal insanlar ve sayısıdır 1 <= x <= r
. f(y)
Kesinlikle pozitif olan ve tüm pozitif için kesinlikle pozitif bir ilk ve negatif olmayan ikinci türeve sahip bazı sürekli, tek değerli fonksiyonlar için , negatif y
olmayan bir miktarı F
, toplamının toplamı olarak tanımlarız f(d(x)), 1 <= x <= r
. İlk iki kuralı F
karşılayan ve küresel minimum değere eşit olan herhangi bir sal tahsisi seçeneği de üçüncü kuralı karşılayacaktır.
g(y) = y
(ikinci türev sıfır) veya g(y) = y²
(ilk ne zaman sıfır derviate sıfır ) kullanamayacağımızdan biraz şaşırdım y = 0
.