NKLETTER spoj – Gửi thư

Nguồn đề bài: http://vn.spoj.com/problems/NKLETTER/

1. Đề bài NKLETTER spoj

Vị Giám đốc công ty XYZ cần gửi một văn bản quan trọng tới một đối tác của mình. Văn bản là một xâu S các chữ cái la tinh in thường. Để bảo mật nội dung văn bản, ông Giám đốc gửi 2 bức thư. Bức thư thứ nhất là phần đầu Sb của xâu S, bức thư thứ 2 là phần cuối Se của S. Hai bức thư Sb và Se đảm bảo đầy đủ nội dung của S, tuy nhiên có thể một phần cuối của Sb có thể được viết lặp lại trong phần đầu của Se, song số kí tự được viết lặp lại không biết trước.

Ví dụ: với văn bản S=’truongnguyenduquannhat’ tạo ra hai bức thư:
Sb=truongngueNdu
                   ngueNduquanNhat=Se=

Sb=’truongnguyendu’ và Se=’nguyenduquannhat’

Yêu cầu: Cho hai xâu Sb và Se, hãy xác định một xâu S có thể là nội dung của bức thư sao cho độ dài của xâu S là ngắn nhất.

Dữ liệu

Dòng đầu chứa xâu Sb, dòng thứ hai chứa xâu Se. Mỗi xâu có độ dài không quá 250.

Kết quả

Ghi ra độ dài của xâu S tìm được.

Ví dụ

Dữ liệu
truongnguyendu
nguyenduquannhat

Kết quả
22
FONT chữ của bài này bị lỗi, các bạn thông cảm. chủ yếu xem thuật toán và code thôi.

Bài này thì ko có thuật toán gì đặc biệt, chỉ cần các bạn xử lí khéo là dc. các bạn có thể tham khảo 2 cách code sau:

2. code tham khảo NKLETTER spoj

program bt;
const fi='';
var
        s1,s2,tam:string;
        f:text;

procedure xuli;
var     check:boolean;
        vt:byte;
begin
        tam:=s1;
        check:=true;
        while check do
                begin
                        vt:=pos(s2[1],tam);
                        if vt<>0 then
                        begin
                        if pos(copy(tam,vt,length(tam)-vt+1),s2)=0 then
                                delete(tam,vt,1)
                        else
                                begin
                                        writeln(length(s1)+length(s2)-length(copy(tam,vt,length(tam)-vt+1)));
                                        exit;
                                end;
                        end
                        else
                                begin
                                        writeln(length(s1)+length(s2));
                                        exit;
                                end;
                end;
end;

begin
        assign(f,fi); reset(f); readln(f,s1); readln(f,s2); close(f);
        xuli;
        readln;
end.

 

var
            sb, se : string;
procedure solve;
            var
                        st : string;
            begin
                        st := sb;
                        while (pos(st, se) <> 1) and (length(st) > 0) do
                                    delete(st, 1, 1);
                        delete(se, 1, length(st));
                        writeln(length(sb) + length(se));              end;
BEGIN
            readln(sb);
            readln(se);
            solve;
END.

 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *