Lý lịch
Các sắp xếp lại bất bình đẳng là một sự bất bình đẳng đó là dựa trên việc sắp xếp lại số. Nếu tôi có hai danh sách các số có cùng độ dài, x 0 , x 1 , x 2 ... x n-1 và y 0 , y 1 , y 2 ... y n-1 có cùng độ dài, trong đó tôi được phép sắp xếp lại các số trong danh sách, cách tối đa hóa tổng x 0 y 0 + x 1 y 1 + x 2 y 2 + ... + x n-1 y n-1 là sắp xếp 2 danh sách trong thứ tự không giảm.
Đọc bài viết Wikipedia tại đây.
Bài tập
Bạn sẽ viết một chương trình lấy đầu vào từ STDIN hoặc một hàm chấp nhận 2 mảng (hoặc các thùng chứa có liên quan) của các số (có cùng độ dài).
Giả sử bạn viết một hàm chấp nhận 2 mảng (a và b), bạn sẽ tìm số cách bạn có thể sắp xếp lại các số trong mảng thứ hai (b) để tối đa hóa:
a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+...+a[n-1]*b[n-1]
Trong trường hợp này, nếu mảng b là [1 0 , 2 1 , 2 2 , 3 3 , 3 4 ] (chỉ số cho rõ ràng),
[1 0 , 2 1 , 2 2 , 3 3 , 3 4 ],
[1 0 , 2 1 , 2 2 , 3 4 , 3 3 ], (hoán đổi hai 3 giây)
[1 0 , 2 2 , 2 1 , 3 3 , 3 4 ] (hoán đổi hai 2 giây)
[1 0 , 2 2 , 2 1 , 3 4 , 3 3 ] (hoán đổi hai 3 và đổi hai 2)
được coi là sắp xếp khác nhau. Bản thân mảng ban đầu cũng được tính là sự sắp xếp lại có thể nếu nó cũng tối đa hóa tổng.
Đối với đầu vào STDIN, bạn có thể giả sử rằng độ dài của các mảng được cung cấp trước các mảng (vui lòng nêu rõ để bạn sử dụng nó) hoặc các mảng được cung cấp trên các dòng khác nhau (cũng vui lòng nêu rõ).
Dưới đây là 4 đầu vào có thể (để thuận tiện):
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)
Đối với đầu ra, bạn được phép trả lại câu trả lời (nếu bạn viết hàm) hoặc in câu trả lời cho STDOUT. Bạn có thể chọn xuất câu trả lời mod 10 9 +7 (từ 0 đến 10 9 +6) nếu thuận tiện hơn.
Các trường hợp thử nghiệm (và giải thích):
[1 1 2 2 2] [1 2 2 3 3] => 24
2 mục đầu tiên phải là 1 và 2. 3 mục cuối là 2, 3 và 3. Có 2 cách để sắp xếp 2 mục giữa 2 mục đầu tiên và 2 mục cuối. Trong số 2 mục đầu tiên, có 2 cách để sắp xếp lại chúng. Trong số 2 mục cuối cùng, có 6 cách để sắp xếp lại chúng.
[1 2 3 4 5] [6 7 8 9 10] => 1
Chỉ có 1 cách, đó là sự sắp xếp được đưa ra trong các mảng.
[1 1 ... 1 1] [1 1 ... 1 1] (10000 numbers) => 10000! or 531950728
Mọi hoán vị có thể có của mảng thứ hai là hợp lệ.
Bản thử nghiệm của Dennis: Pastebin => 583159312 (mod 1000000007)
Ghi điểm:
Đây là môn đánh gôn, vì vậy câu trả lời ngắn nhất sẽ thắng.
Trong trường hợp hòa, mối quan hệ sẽ bị phá vỡ theo thời gian đệ trình, ủng hộ việc nộp trước đó.
Lưu ý:
Các container có thể không được sắp xếp.
Các số nguyên trong các thùng chứa có thể bằng 0 hoặc âm.
Chương trình phải chạy đủ nhanh (tối đa một giờ) cho các mảng có kích thước khiêm tốn (chiều dài khoảng 10000).
Lấy cảm hứng từ câu hỏi này trên Toán học Stack Exchange.
[. . .]
plz trả lời không