Arka fon
Düzenlenme Eşitsizlik numaralarını yeniden düzenleyerek dayanan bir eşitsizlik olduğunu. Aynı uzunlukta iki sayı listem varsa, x 0 , x 1 , x 2 ... x n-1 ve y 0 , y 1 , y 2 ... y n-1 aynı uzunlukta, burada ben listedeki sayıları yeniden düzenlememe izin verildi, toplamı en üst düzeye çıkarmanın bir yolu x 0 y 0 + x 1 y 1 + x 2 y 2 + ... + x n-1 y n-1 , 2 listeyi azalan düzen.
Wikipedia makalesini buradan okuyun .
Görev
STDIN'den girdi alan bir program veya 2 diziyi (veya ilgili kapsayıcıları) (aynı uzunlukta) sayı kabul eden bir işlev yazarsınız.
2 diziyi (a ve b) kabul eden bir işlev yazdığınızı varsayarsak, ikinci dizideki (b) sayıları en üst düzeye çıkarmak için yeniden düzenleme yollarının sayısını bulacaksınız:
a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+...+a[n-1]*b[n-1]
Bu durumda, b dizisi [1 0 , 2 1 , 2 2 , 3 3 , 3 4 ] ise (netlik endeksleri),
[1 0 , 2 1 , 2 2 , 3 3 , 3 4 ],
[1 0 , 2 1 , 2 2 , 3 4 , 3 3 ], (iki 3'ü değiştirin)
[1 0 , 2 2 , 2 1 , 3 3 , 3 4 ] (iki 2'nin yerini değiştirin)
[1 0 , 2 2 , 2 1 , 3 4 , 3 3 ] (iki 3'ü değiştirin ve iki 2'yi değiştirin)
farklı düzenlemeler olarak kabul edilir. Orijinal dizinin kendisi de toplamı en üst düzeye çıkarırsa olası bir yeniden düzenleme olarak sayılır.
STDIN girişi için, dizilerin uzunluğunun dizilerden önce sağlandığını (lütfen onu kullanacağınızı belirtin) veya dizilerin farklı satırlarda sağlandığını (ayrıca lütfen belirtin) varsayabilirsiniz.
İşte olası 4 giriş (kolaylık olması açısından):
5 1 1 2 2 2 1 2 2 3 3 (length before arrays)
1 1 2 2 2 1 2 2 3 3 (the 2 arrays, concatenated)
1 1 2 2 2
1 2 2 3 3 (the 2 arrays on different lines)
5
1 1 2 2 2
1 2 2 3 3 (length before arrays and the 2 arrays on different lines)
Çıktı için, yanıtı döndürmenize (bir işlev yazarsanız) veya yanıtı STDOUT'a yazdırmanıza izin verilir. Daha uygunsa 10 9 +7 (0'dan 10 9 +6'ya kadar) cevap modunu vermeyi seçebilirsiniz .
Test Durumları (ve açıklaması):
[1 1 2 2 2] [1 2 2 3 3] => 24
İlk 2 giriş 1 ve 2 olmalıdır. Son 3 giriş 2, 3 ve 3'tür. İlk 2 giriş ile son 2 giriş arasında 2'yi düzenlemenin 2 yolu vardır. İlk 2 giriş arasında, bunları yeniden düzenlemenin 2 yolu vardır. Son 2 giriş arasında, bunları yeniden düzenlemenin 6 yolu vardır.
[1 2 3 4 5] [6 7 8 9 10] => 1
Dizilerde verilen düzenleme olan sadece 1 yol vardır.
[1 1 ... 1 1] [1 1 ... 1 1] (10000 numbers) => 10000! or 531950728
İkinci dizinin olası her permütasyonu geçerlidir.
Dennis'in Testcase'i: Pastebin => 583159312 (mod 1000000007)
puanlama:
Bu kod golf, bu yüzden en kısa cevap kazanır.
Beraberlik durumunda, bağlar başvuru zamanına göre kırılacak ve daha önceki başvuruyu destekleyecektir.
Dikkat edin:
Kaplar ayrılmamış olabilir.
Kaplardaki tamsayılar sıfır veya negatif olabilir.
Program, orta büyüklükte diziler (yaklaşık 10000 uzunluk) için yeterince hızlı (en fazla bir saat) çalışmalıdır.
Matematik Yığın Değişimi hakkındaki bu sorudan esinlenilmiştir .
[. . .]
plz yanıt gibi girişleri kabul ediyor