Latar Belakang
The Penataan ulang Ketimpangan adalah ketimpangan yang didasarkan pada menata ulang nomor. Jika saya memiliki dua daftar nomor dengan panjang yang sama, x 0 , x 1 , x 2 ... x n-1 dan y 0 , y 1 , y 2 ... y n-1 dengan panjang yang sama, di mana saya Saya diizinkan untuk mengatur ulang angka dalam daftar, cara untuk memaksimalkan jumlah x 0 y 0 + x 1 y 1 + x 2 y 2 + ... + x n-1 y n-1 adalah dengan menyortir 2 daftar di pesanan tidak menurun.
Baca artikel Wikipedia di sini.
Tugas
Anda akan menulis sebuah program yang mengambil input dari STDIN atau fungsi yang menerima 2 array (atau wadah terkait) nomor (yang memiliki panjang yang sama).
Dengan asumsi Anda menulis fungsi yang menerima 2 array (a dan b), Anda akan menemukan sejumlah cara Anda dapat mengatur ulang angka dalam array kedua (b) untuk memaksimalkan:
a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+...+a[n-1]*b[n-1]
Dalam hal ini, jika array b adalah [1 0 , 2 1 , 2 2 , 3 3 , 3 4 ] (indeks untuk kejelasan),
[1 0 , 2 1 , 2 2 , 3 3 , 3 4 ],
[1 0 , 2 1 , 2 2 , 3 4 , 3 3 ], (tukar keduanya 3)
[1 0 , 2 2 , 2 1 , 3 3 , 3 4 ] (menukar keduanya 2)
[1 0 , 2 2 , 2 1 , 3 4 , 3 3 ] (menukar keduanya 3 dan menukar keduanya 2)
dianggap pengaturan yang berbeda. Array asli, itu sendiri, juga dianggap sebagai penataan ulang yang mungkin jika juga memaksimalkan jumlah.
Untuk input STDIN, Anda dapat mengasumsikan bahwa panjang array disediakan sebelum array (harap sebutkan sehingga Anda menggunakannya), atau bahwa array disediakan pada baris yang berbeda (juga harap sebutkan).
Berikut adalah 4 kemungkinan input (untuk kenyamanan):
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)
Untuk hasil, Anda diizinkan untuk mengembalikan jawaban (jika Anda menulis fungsi) atau mencetak jawaban ke STDOUT. Anda dapat memilih untuk mengeluarkan jawaban mod 10 9 +7 (dari 0 hingga 10 9 +6) jika lebih nyaman.
Kasus Uji (dan penjelasan):
[1 1 2 2 2] [1 2 2 3 3] => 24
2 entri pertama harus 1 dan 2. 3 entri terakhir adalah 2, 3 dan 3. Ada 2 cara untuk mengatur 2 antara 2 entri pertama dan 2 entri terakhir. Di antara 2 entri pertama, ada 2 cara untuk mengaturnya. Di antara 2 entri terakhir, ada 6 cara untuk mengaturnya.
[1 2 3 4 5] [6 7 8 9 10] => 1
Hanya ada 1 cara, yaitu pengaturan yang diberikan dalam array.
[1 1 ... 1 1] [1 1 ... 1 1] (10000 numbers) => 10000! or 531950728
Setiap permutasi yang dimungkinkan dari array kedua adalah valid.
Dennis ' Testcase : Pastebin => 583159312 (mod 1000000007)
Mencetak:
Ini kode-golf, jadi jawaban tersingkat menang.
Dalam hal pengikatan, ikatan akan diputus pada saat pengajuan, mendukung pengajuan sebelumnya.
Perhatikan:
Kontainer mungkin tidak disortir.
Bilangan bulat dalam wadah mungkin nol atau negatif.
Program harus berjalan cukup cepat (paling lama satu jam) untuk array berukuran sedang (sekitar 10.000 panjangnya).
Terinspirasi oleh pertanyaan ini di Mathematics Stack Exchange.
[. . .]
respons plz