Bạn đang nhìn vào một đại lộ, và ai đó đã bỏ rác! Bạn cần viết một chương trình để giúp khắc phục vấn đề, bằng cách bỏ rác vào thùng rác.
Nhiệm vụ
Đại lộ được tạo thành từ một chuỗi các ký tự ASCII có thể in được, ví dụ:
[[](dust)[]] car ((paper)vomit) (broken(glass)) [[] (rotten) fence (dirty)
Một số dấu ngoặc ở đây là vô song; Đó chỉ là những trò giải mã. Những gì chúng tôi quan tâm là các bộ dấu ngoặc phù hợp.
Một thùng rác là một chuỗi bắt đầu với [
và kết thúc với ]
, và với dấu ngoặc trong nội bộ phù hợp và dấu ngoặc đơn. Ví dụ, []
và [[](dust)[]]
là thùng rác trong chuỗi trên.
Một túi rác là một chuỗi bắt đầu bằng (
và kết thúc bằng )
, và với dấu ngoặc và dấu ngoặc đơn phù hợp bên trong. Ví dụ, (dust)
là một túi rác trong chuỗi trên.
Có thể một số túi rác đã ở trong thùng rác rồi. Tuy nhiên, ít nhất một cái sẽ bị bỏ lại và chúng ta cần di chuyển các túi rác để tất cả chúng nằm trong thùng rác. Cụ thể, đối với mỗi túi rác hiện không có trong thùng rác (tức là một chuỗi con của thùng rác đó), chúng ta cần loại bỏ nó khỏi vị trí hiện tại của nó trong chuỗi và thay vào đó vào vị trí bên trong thùng rác .
Có một quy tắc bổ sung ở đây. Bởi vì chúng tôi không muốn chi quá nhiều tiền cho những người thu gom rác và tuyến đường của họ đưa họ dọc theo đại lộ từ phải sang trái, chúng tôi muốn di chuyển từng túi rác sang trái (tiêu chí quan trọng nhất, giả sử chúng tôi phải di chuyển nó tại tất cả) và khoảng cách ngắn nhất có thể (miễn là nó di chuyển sang trái). Vì vậy, ví dụ, đầu ra đúng duy nhất cho
[can1](bag)[can2]
Là
[can1(bag)][can2]
(di chuyển túi chỉ một ký tự bên trái). Ngoài ra, các túi cần phải theo thứ tự tương đối:
[can](bag1)(bag2)
phải trở thành
[can(bag1)(bag2)]
(tức là bạn không thể đặt (bag2)
bên trái của (bag1)
.)
Làm rõ
- Sẽ không có túi rác nào ở bên trái thùng rác ngoài cùng bên trái; nó sẽ luôn có thể có thể tất cả các thùng rác bằng cách di chuyển nó sang bên trái.
- Sẽ luôn có ít nhất một túi để di chuyển. Có thể có nhiều hơn một.
- Sẽ không bao giờ có thùng rác bên trong túi rác (lon quá giá trị để bỏ đi).
- Nếu một cái túi đã ở trong một cái hộp, hãy để nó một mình.
- Không sao cho đầu vào và đầu ra khác nhau về khoảng trắng theo sau (bao gồm cả dòng mới).
Ví dụ:
Đầu vào:
[[](dust)[]] car ((paper)vomit) (broken(glass)) [[] (rotten) fence (dirty)
Đầu ra:
[[](dust)[]((paper)vomit)(broken(glass))] car [[(rotten)(dirty)] fence
Đầu vào:
[]] (unusable) door (filthy) car
Đầu ra:
[(unusable)(filthy)]] door car