BOI 2013 - Vim

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2500 (p) Thời gian: 2.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Victor ngưỡng mộ nhà văn Ernest Vincent Wright, người viết tiểu thuyết Gadsby mà không dùng chữ e. Victor cũng viết một tiểu thuyết, chỉ sử dụng mười chữ cái đầu của bảng chữ cái: abcdefghij. Khi phím e bị hỏng giữa chừng, cậu quyết định xóa toàn bộ chữ e đã viết bằng trình soạn thảo Vim.

Victor chỉ biết ba lệnh:

  • x: xóa ký tự tại con trỏ. Chỉ số vị trí con trỏ tính từ trái không đổi, nên con trỏ nằm trên ký tự vốn ngay bên phải ký tự vừa xóa. Không được dùng x khi con trỏ ở ký tự cuối cùng của văn bản. Lệnh tốn một lần nhấn phím.
  • h: đưa con trỏ sang trái một ký tự. Nếu đã ở đầu văn bản thì không có gì thay đổi. Lệnh tốn một lần nhấn phím.
  • fC: nhấn f rồi một ký tự \(C\), đưa con trỏ tới lần xuất hiện đầu tiên của \(C\) nằm bên phải vị trí hiện tại, kể cả khi ký tự hiện tại cũng là \(C\). Nếu không còn \(C\) bên phải thì con trỏ đứng yên. Lệnh tốn hai lần nhấn phím. Vì phím e bị hỏng, không được dùng fe.

Để minh họa cách hoạt động của lệnh, dùng dấu ngoặc vuông đánh dấu ký tự dưới con trỏ; các dấu ngoặc không thuộc văn bản. Từ trạng thái jeff[i]ehadabigidea, thực hiện riêng từng lệnh cho kết quả:

Lệnh Trạng thái sau lệnh
x jeff[e]hadabigidea
h jef[f]iehadabigidea
fi jeffiehadab[i]gidea

Trong bài toán cần giải, Victor phải xóa tất cả chữ e và không xóa bất kỳ chữ nào khác; lệnh x ở hàng minh họa chỉ giải thích cơ chế của lệnh. Ban đầu con trỏ ở ký tự đầu tiên. Hãy tìm số lần nhấn phím ít nhất.

Dữ liệu vào

Dòng đầu chứa số nguyên \(N\), là độ dài văn bản. Dòng tiếp theo chứa \(N\) chữ cái thường từ a đến j. Ký tự đầu tiên và ký tự cuối cùng đều khác e.

Dữ liệu ra

Một số nguyên là số lần nhấn phím ít nhất để xóa hết các chữ e và giữ nguyên mọi chữ khác.

Ràng buộc

  • \(1 \le N \le 70\,000\).
  • Ký tự thuộc abcdefghij; ký tự đầu và cuối khác e.

Phân nhóm

  • \(50\) điểm: \(N\le500\).
  • Thêm \(10\) điểm: \(N\le5000\).
  • \(40\) điểm còn lại: không có ràng buộc bổ sung.

Ví dụ

Ví dụ 1

Input
35
chefeddiefedjeffeachbigagedegghehad
Output
36
Giải thích

Một dãy phím tối ưu là fdhxhhxffhxfahxhhhxhhhxfdhxfghxfahhx. Mỗi lần xuất hiện của f cùng ký tự tiếp theo tạo thành một lệnh tìm kiếm và tốn hai lần nhấn phím.

Tệp

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: