Kitapları istiflerken genellikle en büyükleri, en küçükleri de en üste koymak istersiniz. Bununla birlikte, gizli OKB'm, biri kısa olan fakat diğerinden daha geniş olan iki kitabım varsa, beni çok rahatsız ediyor. Onları hangi sıraya koyarsam ver, üst kitap bir tarafta alt kitabın ötesine uzanacak.
Örnek olarak, bir kitabın boyutları var (10,15)
, diğeri boyutlar (11,14)
. Hangi tarafa koyarsam sürsünlerim, çıkıntı alırım. Ama boyutlara sahip kitaplar varsa (4,3)
ve (5,6)
ben eski aşağıda ikincisi yerleştirerek bir sarkan önleyebilirsiniz.
Bu zorluğun amaçları doğrultusunda, sadece derhal aşağıdaki kitapla ilgili çıkıntıları dikkate alacağız . Örneğin ben bir yığın varsa (5,5)
, (3,3)
, (4,4)
(aklı başında herkes bunu yapabilir değil), bir çıkıntı gibi üst kitap sayar, bu alt kitabın ötesine geçmez rağmen. Benzer şekilde, yığın (3,3)
, (3,3)
, (4,4)
ayrıca alt birinin ötesine uzanan üst kitabında rağmen sadece bir çıkıntıya sahiptir.
Meydan okuma
Kitap boyutları için bir tamsayı çifti listesi verildiğinde, bu çiftleri / kitapları, çıkma sayısının minimum olacağı şekilde sıralayın. Kitapları döndürmemelisiniz - tüm dikenlerin aynı yöne bakmasını istiyorum. Aynı sarkma sayısına sahip birden fazla çözüm varsa, böyle bir sipariş seçebilirsiniz. Sıralama algoritmanızın kararlı olması gerekmez. Uygulamanız, kitap boyutlarının her birinin 2 16'dan küçük olduğunu varsayabilir .
Zaman karmaşıklığı: Bunu biraz daha ilginç hale getirmek için, algoritmanızın asimptotik en kötü durum karmaşıklığı yığının boyutunda polinom olmalıdır. Yani sadece her olası permütasyonu test edemezsin Lütfen algoritmanızın optimizasyonunun ve karmaşıklığının kısa bir kanıtını ve isteğe bağlı olarak büyük rasgele girdiler için ölçeklendirmeyi gösteren bir çizim ekleyin. Tabii ki, girişin maksimum boyutunu, kodunuzun O (1) 'de çalıştığını belirtmek için kullanamazsınız.
Herhangi bir uygun (önceden işlenmemiş) liste biçiminde bir program veya işlev yazabilir, STDIN, ARGV veya function argümanından giriş alabilir ve sonucu yazdırabilir veya geri döndürebilirsiniz.
Bu kod golf, yani en kısa cevap (bayt cinsinden) kazanır.
Polinom çözümünün var olduğuna inanıyorum, ancak beni yanlış ispat ederseniz, golf gönderimi yerine böyle bir kanıt sunabilirsiniz. Bu durumda, P ≠ NP olabilir . İlk doğru kanıtı kabul edeceğim ve ona bir ödül vereceğim.
Örnekler
In: [[1, 1], [10, 10], [4, 5], [7, 5], [7, 7], [10, 10], [9, 8], [7, 5], [7, 5], [3, 1]]
Out: [[10, 10], [10, 10], [9, 8], [7, 7], [7, 5], [7, 5], [7, 5], [4, 5], [3, 1], [1, 1]]
In: [[4, 5], [5, 4], [5, 4], [5, 4], [5, 4], [4, 5], [4, 5], [4, 5], [5, 4], [4, 5]]
Out: [[4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [5, 4], [5, 4], [5, 4], [5, 4], [5, 4]]
or [[5, 4], [5, 4], [5, 4], [5, 4], [5, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5]]
In: [[2, 3], [1, 1], [5, 5], [7, 1]]
Out: [[5, 5], [2, 3], [7, 1], [1, 1]]
or [[5, 5], [2, 3], [1, 1], [7, 1]]
or [[7, 1], [5, 5], [2, 3], [1, 1]]
or [[7, 1], [1, 1], [5, 5], [2, 3]]
Bunları el ile yaptım, bu yüzden herhangi bir hata görürseniz haberim olsun.