Giriş
Çoğunuz, bir sayı listesini sıralamak için birleştirme sıralama algoritmasını biliyorsunuzdur . Algoritmanın bir parçası olarak, mergeiki sıralı listeyi bir sıralı listede birleştiren bir yardımcı işlev yazılır . Python benzeri sözde kodda, işlev genellikle şöyle görünür:
function merge(A, B):
C = []
while A is not empty or B is not empty:
if A is empty:
C.append(B.pop())
else if B is empty or A[0] ≤ B[0]:
C.append(A.pop())
else:
C.append(B.pop())
return C
Fikir ilk elemanlarının küçük haşhaş tutmaktır Ave Bhem listeleri boş olan ve içine sonuçları toplamak kadar C. Eğer Ave Bikisi de sıralanır, sonra böyledir C.
Tersine, eğer Cbir sıralı liste ve biz herhangi iki alt sıralar bölmek Ave Bsonra Ave Baynı zamanda sıralanır ve merge(A, B) == C. İlginç bir şekilde, bu Csıralanmıyorsa, bu zorunlu değildir, bu da bizi bu zorluğa getirir.
Giriş
2*nGirişiniz [0, 1, 2, ..., 2*n-1], bazıları n > 0için liste olarak verilen ilk negatif olmayan tam sayıların permütasyonudur C.
Çıktı
İki liste Ave böyle bir Buzunluk nvarsa C == merge(A, B), çıktınız gerçeğe uygun bir değer ve aksi takdirde bir sahte değer olacaktır. Giriş kopya içermediğinden, mergeişlevde bağların nasıl koptuğu konusunda endişelenmenize gerek yoktur .
Kurallar ve Bonuslar
Bir işlev veya tam bir program yazabilirsiniz. En düşük bayt sayısı kazanır ve standart boşluklara izin verilmez.
Listeleri hesaplamanız gerekmediğini Ave B"evet" örneklerinde gerekli olmadığını unutmayın . Ancak, listeleri gerçekten çıkarırsanız, % -20 bonus alırsınız . Bu bonusu talep etmek için, tüm olasılıkları değil, yalnızca bir çift liste çıkarmanız gerekir. Bu bonusun güçlü yazılan dillerde talep edilmesini kolaylaştırmak için, "hayır" örneklerinde bir çift boş liste çıkarılmasına izin verilir.
Kaba zorlama yasak değildir, ancak son dört test vakasının tümünü 1 saniyenin altında hesaplamak için % -10 bonus vardır .
Test Durumları
"Evet" örneklerinde yalnızca bir olası çıktı verilir.
[1,0] -> False
[0,1] -> [0] [1]
[3,2,1,0] -> False
[0,3,2,1] -> False
[0,1,2,3] -> [0,1] [2,3]
[1,4,0,3,2,5] -> False
[4,2,0,5,1,3] -> [4,2,0] [5,1,3]
[3,4,1,2,5,0] -> [4,1,2] [3,5,0]
[6,2,9,3,0,7,5,1,8,4] -> False
[5,7,2,9,6,8,3,4,1,0] -> False
[5,6,0,7,8,1,3,9,2,4] -> [6,0,8,1,3] [5,7,9,2,4]
[5,3,7,0,2,9,1,6,4,8] -> [5,3,7,0,2] [9,1,6,4,8]
[0,6,4,8,7,5,2,3,9,1] -> [8,7,5,2,3] [0,6,4,9,1]
[9,6,10,15,12,13,1,3,8,19,0,16,5,7,17,2,4,11,18,14] -> False
[14,8,12,0,5,4,16,9,17,7,11,1,2,10,18,19,13,15,6,3] -> False
[4,11,5,6,9,14,17,1,3,15,10,12,7,8,0,18,19,2,13,16] -> [4,17,1,3,15,10,12,7,8,0] [11,5,6,9,14,18,19,2,13,16]
[9,4,2,14,7,13,1,16,12,11,3,8,6,15,17,19,0,10,18,5] -> [9,4,2,16,12,11,3,8,6,15] [14,7,13,1,17,19,0,10,18,5]
(K[0], Q-K[0])yazdırabileceğinizi görebilirsiniz(K[0], K[-1]). Yine de bunun bir tasarruf sağlayıp sağlamadığını bilmiyorum.