trang chủ / bài tập / renumber

Đánh số lại các tệp test

Đề bài

Mô tả

n tệp chứa test, tên của chúng đang được đặt tuỳ tiện. Mỗi tệp thuộc một trong hai loại: tệp ví dụ (loại 1) hoặc tệp test thường (loại 0).

Bạn muốn đổi tên các tệp sao cho tên của chúng là các số nguyên phân biệt từ 1 đến n không bị hụt số nào, đồng thời thoả mãn:

  • Tất cả các tệp ví dụ nằm ở đầu, mang tên 1,2,,e, với e là tổng số tệp ví dụ.
  • Tất cả các tệp thường mang tên e+1,e+2,,n.

Thao tác duy nhất được phép là lệnh move: lệnh move a b đổi tên tệp a thành b. Nếu tại thời điểm thực hiện đã tồn tại một tệp tên b thì nội dung của nó bị ghi đè (mất đi). Sau lệnh move a b, tệp a không còn tồn tại, còn tệp b mang nội dung mà tệp a có trước đó.

Hãy đưa ra một dãy lệnh move với số lệnh ít nhất để đạt được trạng thái mong muốn.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n , số lượng tệp test.
  • n dòng tiếp theo, mỗi dòng gồm nameitypei: namei là tên tệp hiện tại, typei bằng 1 nếu tệp là ví dụ và 0 nếu là test thường.

Tên tệp gồm các chữ số và chữ cái tiếng Anh in thường, độ dài từ 1 đến 6 ký tự, và các tên là phân biệt.

Dữ liệu ra

  • Dòng đầu in số nguyên k , số lệnh ít nhất.
  • k dòng tiếp theo, mỗi dòng có dạng move a b, trong đó a là tên một tệp đang tồn tại ở thời điểm thực hiện lệnh, còn b là một xâu gồm chữ số và chữ cái in thường độ dài từ 1 đến 6 ký tự.

Nếu có nhiều dãy lệnh cùng đạt số lệnh ít nhất, in ra một dãy bất kỳ.

Ràng buộc

  • 1n105
  • Mỗi tên tệp có độ dài từ 1 đến 6, gồm chữ số và chữ cái in thường, và tất cả các tên phân biệt.

Ví dụ

Input Output Giải thích
5
01 0
2 1
2extra 0
3 1
99 0
4
move 3 1
move 01 3
move 2extra 4
move 99 5
e=2 tệp ví dụ (tên 2 và 3). Tệp 2 đã đúng chỗ nên giữ nguyên; ba tệp còn lại và tệp 3 cần chuyển. Kết quả: tên 1,2 là ví dụ, tên 3,4,5 là test thường. Mọi dãy 4 lệnh hợp lệ đều được chấp nhận.
2
1 0
2 1
3
move 1 100001
move 2 1
move 100001 2
Hai tên 1,2 đang bị hoán đổi loại. Vì cả hai tên đích đều đang bị chiếm nên phải mượn một tên tạm (ví dụ 100001) để phá vòng, tốn 3 lệnh.
5
1 0
11 1
111 0
1111 1
11111 0
5
move 11 2
move 1 3
move 1111 1
move 111 4
move 11111 5
Chỉ có tên 1 là số hợp lệ trong [1,n] nhưng sai loại; các tên còn lại đều không phải số trong [1,5]. Cả 5 tệp đều phải chuyển.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.400 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0