Gần đây tôi đã bắt đầu giải các câu hỏi về thẩm phán trực tuyến. Tôi đang mắc kẹt trong this question in SPOJ:SPOJ: Xáo trộn thẻ
Dưới đây là một thuật toán cho shuffling thẻ N:
- Các thẻ được chia thành cọc bằng K, trong đó K là một yếu tố của N.
- Đáy N/Thẻ K thuộc về cọc 1 theo cùng thứ tự (vì vậy thẻ đáy của cọc .initial là thẻ đáy của cọc 1).
- Thẻ N/K tiếp theo từ dưới cùng thuộc về cọc 2, v.v.
- Bây giờ thẻ trên cùng của cọc xáo trộn là thẻ hàng đầu của cọc 1. Thẻ tiếp theo là thẻ đầu của đống 2, ..., thẻ thứ K của cọc xáo trộn là thẻ đầu của đống K. Sau đó, (K + 1) th thẻ là thẻ mà bây giờ là ở trên cùng của đống 1, (K + 2) nd là thẻ mà bây giờ là ở trên cùng của đống 2 và như vậy.
Ví dụ, nếu N = 6 và K = 3, thứ tự của một cỗ bài "ABCDEF" (từ trên xuống dưới) khi xáo trộn một lần sẽ thay đổi thành "ECAFDB".
Cho N và K, số lượng shuffles tối thiểu cần thiết sau đó cọc được khôi phục theo thứ tự ban đầu là bao nhiêu?
Tôi đã thử mô phỏng nhưng vượt quá giới hạn thời gian. Có phương trình toán học nào không?
x = (x% K) * (N/K) + (Nx)/K - 1 .... trong đó x bắt đầu từ 0 .... mọi thứ tốt hơn? – vastutsav
Tôi không chắc là tôi có ý tưởng của bạn. Câu trả lời là công thức trực tiếp từ độ dài của chuỗi như được mô tả trong bài đăng của tôi. –
m xin lỗi vì không rõ ràng hơn ... chúng tôi sẽ bắt đầu với giá trị x = 0 ... sau đó sử dụng công thức trên đệ quy nhận vị trí mới của thẻ xth .... sau khi thẻ trở về vị trí 0, chúng tôi có cấu hình ban đầu ... chúng tôi đếm số lần lặp lại cần thiết trong toàn bộ quá trình ... HOẶC chúng ta có thể duy trì một bảng của bước tiếp theo ... có cách tiếp cận nào tốt hơn không? bất kỳ công cụ lý thuyết nhóm nào? – vastutsav