Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Trình biên dịch] Sửa lỗi chính tả từ khoá bằng khoảng cách Levenshtein

    Một chiến lược phục hồi lỗi mức cụm từ (phrase-level recovery) phổ biến trong trình biên dịch là tự động thay thế 1 token bị nghi sai chính tả bằng từ khoá hợp lệ gần nhất.

    Cho tập mmm từ khoá hợp lệ, phân biệt (chỉ gồm chữ cái thường). Với mỗi token nghi vấn ttt (chỉ gồm chữ cái thường), tìm từ khoá kkk trong tập sao cho khoảng cách chỉnh sửa Levenshtein d(t,k)d(t,k)d(t,k) (số phép chèn/xoá/thay thế 1 ký tự tối thiểu để biến ttt thành kkk) là nhỏ nhất. Nếu có nhiều từ khoá cùng đạt khoảng cách nhỏ nhất, chọn từ khoá nhỏ nhất theo thứ tự từ điển (so sánh chuỗi thông thường).

    Gọi d∗d^*d∗ là khoảng cách nhỏ nhất tìm được và L=⌊∣t∣/2⌋L = \lfloor |t|/2 \rfloorL=⌊∣t∣/2⌋ (nửa độ dài ttt, làm tròn xuống).

    • Nếu d∗≤Ld^* \le Ld∗≤L: token được "sửa" thành từ khoá đã chọn — in ra từ khoá đó.
    • Ngược lại (không đủ gần bất kỳ từ khoá nào một cách an toàn): giữ nguyên, in ra chính token ttt.

    Ví dụ: từ khoá {\{{int, for, while, return}\}}; token whille (độ dài 6, L=3L=3L=3): khoảng cách đến while là 1 (thừa 1 ký tự l) ≤3\le 3≤3 ⇒\Rightarrow⇒ sửa thành while. Token xyzxyz (độ dài 6, L=3L=3L=3): khoảng cách nhỏ nhất đến mọi từ khoá đều >3> 3>3 ⇒\Rightarrow⇒ giữ nguyên xyzxyz.

    • Định dạng đầu vào:

      Dòng 1: mmm (1≤m≤2001 \le m \le 2001≤m≤200). Dòng 2: mmm từ khoá cách nhau dấu cách (mỗi từ chỉ gồm chữ cái thường, độ dài 1..201..201..20). Dòng 3: qqq (1≤q≤2001 \le q \le 2001≤q≤200). qqq dòng tiếp theo, mỗi dòng 1 token cần xét (chữ cái thường, độ dài 1..201..201..20).

    • Định dạng đầu ra:

      qqq dòng, dòng thứ iii là kết quả (từ khoá đã sửa hoặc token giữ nguyên) tương ứng với token thứ iii.

    Ví dụ:

    Đầu vào:

    2
    a b
    3
    a
    ab
    abc
    

    Đầu ra:

    a
    a
    abc
    

    Đầu vào:

    4
    int for while return
    4
    int
    fr
    whille
    xyzxyz
    

    Đầu ra:

    int
    for
    while
    xyzxyz
    

    Đang tải editor...