Tôi có một đống vớ sạch mà tôi muốn sắp xếp thành cặp. Thật không may, tôi chỉ có thể đi tất từ hai đầu của đống, không phải giữa. Hơn nữa, tôi chỉ có thể tháo vớ ra khỏi đống một đôi phù hợp tại một thời điểm. Chiến lược của tôi là đầu tiên chia cọc thành một hoặc nhiều cọc nhỏ hơn. Tôi nghĩ rằng một số ví dụ sẽ làm rõ điều này. Tôi sẽ đại diện cho mỗi chiếc vớ là một số nguyên dương (số nguyên phù hợp cho biết tất bằng nhau).
Nếu đống vớ ban đầu là
1 2 3 3 2 1
sau đó tôi không phải thực hiện bất kỳ chia tách. Tôi có thể tháo cả hai 1vớ, rồi cả 2vớ, rồi cả 3vớ.
Nếu thay vào đó, cọc ban đầu là
1 2 3 2 3 1
sau đó tôi phải tách nó ra trước vì tôi sẽ không thể ghép tất cả các vớ bằng cách chỉ tháo chúng ra khỏi cuối. Một khả năng là chia nó thành hai đống
1 2 3 and 2 3 1
Bây giờ tôi có thể loại bỏ 1tất, rời đi 2 3 and 2 3, tiếp theo là 3tất, rời đi 2 and 2, và cuối cùng là 2tất.
Công việc của bạn
Đưa ra đống vớ ban đầu, hãy viết một chương trình sẽ chia nó thành các đống nhỏ hơn cho phép tôi phân loại vớ. Chương trình của bạn nên chia cọc thành số lượng cọc ít nhất có thể (nếu có nhiều giải pháp tốt nhất, bạn chỉ cần tìm một giải pháp).
Đầu vào sẽ được cung cấp dưới dạng danh sách, chuỗi phân tách hoặc hình thức thuận tiện khác. Nó sẽ chỉ chứa các số nguyên giữa 1và một số giá trị tối đa n, với mỗi số nguyên xảy ra chính xác hai lần.
Đầu ra phải bao gồm danh sách đầu vào được chia thành các danh sách nhỏ hơn, được đưa ra dưới bất kỳ hình thức thuận tiện nào.
Ví dụ
Input Sample Output
1 1 1 1
1 2 1 2 1; 2 1 2
1 3 2 4 3 2 1 4 1 3 2; 4 3 2 1 4
1 2 3 4 3 4 1 2 1; 2 3; 4 3 4 1 2
1 1 2 2 3 3 1 1 2; 2 3 3
4 3 4 2 2 1 1 3 4 3 4 2; 2 1 1 3
Lưu ý rằng đây không phải là đầu ra được phép duy nhất cho hầu hết các đầu vào này. Đối với trường hợp thứ hai, ví dụ, các đầu ra 1 2; 1 2hoặc 1 2 1; 2cũng sẽ được chấp nhận.
Cảm ơn Sp3000 cho một số gợi ý kiểm tra!
Tôi ghét dành thời gian dài để phân loại quần áo của tôi, vì vậy hãy làm cho mã của bạn càng ngắn càng tốt. Câu trả lời ngắn nhất trong byte chiến thắng!
Ghi chú
- Tôi không muốn phải nhìn vào phía sau một chiếc tất để xem có phải đôi phù hợp của nó ở đó không, vì vậy việc mang cả hai chiếc vớ vào một đôi từ cùng một đầu là không được phép. Ví dụ, nếu là đống
1 1 2 2thì bạn sẽ không thể để nó thành một đống và lấy cả hai1vớ từ đầu bên trái.
123213có thể được chia thành 1; 23; 213( 1; 23; 213-> 1; 2; 21-> ; 2; 2)?
123213chỉ bằng hai cọc, câu trả lời của bạn sẽ phải đưa ra một trong hai lần chia hai cọc.