Thứ Bảy, 12 tháng 3, 2016

TRÁO BÀI

Cho bộ bài gồm n lá bài được xếp thành dãy thứ tự từ 1 tới n, đầu tiên người ta ghi vào mỗi lá bài một số nguyên là số thứ tự ban đầu của lá bài đó. Xét phép tráo S(i,m,j): lấy ra khỏi bộ bài m lá liên tiếp bắt đầu từ lá bài thứ i, sau đó chèn m lá bài này vào trước lá bài thứ j trong số nm lá bài còn lại 1≤i, jnm +1. Quy ước rằng nếu j=n-m+1 thì m lá bài này sẽ đưa vào cuối dãy.
Ví dụ với n=9:
Bộ bài ban đầu: (1, 2, 3, 4, 5, 6, 7, 8, 9)
Thực hiện S(1,5,2): (1, 2, 3, 4, 5, 6, 7, 8,9) ® (6, 1, 2, 3, 4, 5, 7, 8, 9)
Thực hiện tiếp S(5,4,6): (6, 1, 2, 3, 4, 5, 7, 8, 9) ® (6,1,2,3,9,4,5,7,8)
Thực hiện tiếp S(8,2,1): (6,1,2,3,9,4,5,7,8)  ® (7,8,6,1,2,3,9,4,5)
Yêu cầu: Hãy cho biết số ghi trên k lá bài đầu tiên của bộ bài (kn) sau khi thực hiện x phép tráo bài cho trước.
Dữ liệu: Vào từ file văn bản CARDS.INP
+ Dòng 1: Chứa 3 số nguyên dương n, k, x (n≤105, k≤32, x≤105)
+ x dòng tiếp theo, mỗi dòng ghi ba số nguyên i, m, j tương ứng với một phép tráo S(i,m,j)
Kết quả: ghi ra file văn bản CARDS.OUT một dòng chứa k số nguyên, số thứ i là số ghi trên lá bài thứ i sau khi thực hiện x phép tráo đã cho.
Các số trên một dòng của Input/Output files được/phải ghi cách nhau một dấu cách.
Ví dụ:
CARDS.INP
CARDS.OUT
9 2 3
1 5 2
5 4 6
8 2 1
7 8


Không có nhận xét nào: