Tải bản đầy đủ (.docx) (34 trang)

Chu de 10 2015

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (171.12 KB, 34 trang )

<span class='text_page_counter'>(1)</span>LUYỆN THI HỌC SINH GIỎI MÔN TIN HỌC Thời gian làm bài: 150 phút. CHỦ ĐỀ 10 XÂU ĐỐI XỨNG Tổng quan TT 1 2 3. Tên bài Khúc con đối xứng đầu tiên Sắp xếp xâu Xâu con đối xứng dài nhất. File chương trình. File dữ liệu. File kết quả. Thời gian. DXDAU.PAS. DXDAU.INP. DXDAU.OUT. 1s/test. SXXAU.PAS. SXXAU.INP. SXXAU.OUT. 1s/test. XAUDX.PAS. XAUDX.INP. XAUDX.OUT. 1s/test. Bài 1. (6 điểm) KHÚC CON ĐỐI XỨNG ĐẦU TIÊN Xâu đối xứng là một xâu kí tự, có không ít hơn 1 kí tự, và khi đọc từ trái sang phải hay từ phải sang trái đều giống nhau. Ví dụ ‘A’, ‘TET’, ‘CAC’ là các xâu đối xứng, còn các xâu ‘CAT’, ‘MEET’ đều không phải là xâu đối xứng. Khúc con của một xâu S là xâu gồm một số kí tự liên tiếp của xâu S. Yêu cầu: Cho trước xâu kí tự S, có độ dài không quá 250 kí tự, cần: a) Tính độ dài D của khúc con đối xứng dài nhất của xâu S. b) Xác định khúc con đối xứng dài nhất đầu tiên K của xâu S, vị trí đầu (VTD), và vị trí cuối của K trong S. Dữ liệu: Đọc từ trong tệp DXDAU.INP, gồm nhiều phương án, mỗi phương án trên một dòng, trên dòng đó ghi xâu S. Kết quả: Đưa ra màn hình và ghi ra tệp DXDAU.OUT, mỗi phương án ghi trên một dòng, trên dòng đó ghi ba số D, VTD, VTC, tiếp đó ghi khúc K tìm được. Ví dụ: DXDAU.INP DXDAU.OUT ACBC 3 2 4 CBC NANGNANG 7 1 7 NANGNAN Bài 2 (7 điểm) SẮP XẾP XÂU Cho một xâu S chỉ gồm các chữ cái viết thường và chữ số, độ dài không quá 250. Khúc số của xâu S là một khúc con của S, gồm tất cả các chữ số liên tiếp. Khúc chữ của xâu S là một khúc con của S, gồm tất cả các chữ cái liên tiếp. Yêu cầu: a) Tìm số skc là số các khúc chữ, đối xứng, có trong xâu S, cùng với danh sách XKC của chúng. b) Tìm số sks là số các khúc số, đối xứng, có trong xâu S,cùng với danh sách XKS của chúng. c) Sắp xếp lại các kí tự trong xâu S sao cho: - trong các khúc số, các chữ số được sắp theo thứ tự tăng dần. - trong các khúc chữ, các chữ cái được sắp theo thứ tự giảm dần. Dữ liệu: Đọc vào từ tệp văn bản SXXAU.INP, gồm nhiều phương án, mỗi phương án trên 1 dòng, trên dòng đó ghi xâu S. Kết quả: Ghi ra màn hình và ghi ra tệp văn bản SXXAU.OUT, mỗi phương án trên 1 dòng, trên dòng đó ghi số skc, danh sách XKC, số sks, danh sách XKS, tiếp đó ghi xâu S sau khi đã được sắp xếp lại, các danh sách XKC, XKS cần để trong cặp ngoặc vuông [].). Ví dụ:. SXXAU.INP df443gfg234432jgudit7e7733 dfgfg234432jgudit7443e77334 SXXAU.OUT 2 [gfg e] 2 [234432 7] fd344ggf223344utjigd7e3377 1 [e] 1 [234432] ggffd223344utjigd3447e33477. Bài 3. (7 điểm) XÂU CON ĐỐI XỨNG DÀI NHẤT Cho trước xâu kí tự S, độ dài không quá 255. Xâu T được gọi là xâu con của xâu S nếu ta có thể xóa bớt một số ký tự trong xâu S để nhận được xâu T. Ví dụ xâu T = ‘12345’ là xâu con của xâu S = ‘1a2b3c45d’..

<span class='text_page_counter'>(2)</span> Yêu cầu: Tìm xâu con đối xứng T dài nhất của xâu S. Dữ liệu: Đọc từ tệp văn bản XAUDX.INP, gồm nhiều phương án, mỗi phương án trên 1 dòng, trên dòng đó ghi xâu S. Kết quả: Ghi ra màn hình và ghi ra tệp văn bản XAUDX.OUT, mỗi phương án trên 1 dòng, trên dòng đó ghi độ dài của xâu T, tiếp đó ghi xâu T tìm được. Ví dụ: XAUDX.INP MADAM Abcbd XAUDX.OUT 5 MADAM 3 bcb. TÓM TẮT LÝ THUYẾT I. Hiểu thêm về xâu ký tự. Xâu ký tự (sau đây sẽ gọi tắt là xâu) là một đoạn văn bản mà mỗi phần tử của nó một ký tự. Ký tự có thể là: - Các chữ cái viết hoa: A, B, C, …, Z. - Các chữ cái viết thường: a, b, c, …, z. - Các chữ số: 0, 1, 2, …, 9..

<span class='text_page_counter'>(3)</span> - Các dấu ngắt câu: chấm (.), phảy (,), chấm phẩy (;), chấm than (!), … - Các ký tự đặc biệt: ~, @, #, $,... Xâu số là xâu ký tự biểu diễn một số (số nguyên hoặc số thực). Ví dụ: ‘123’, ‘123.456’ là các xâu số, còn ‘123.456@234’ không phải là xâu số. II. Xâu đối xứng Xâu đối xứng là xâu mà khi đọc từ trái sang phải hay từ phải sang trái đều cho cùng một kết quả. Ví dụ: ‘abcba’, ‘121’ là các xâu đối xứng, còn ‘abcd’, ‘123.456’ không phải là xâu đối xứng. Hiển nhiên xâu chỉ gồm 1 ký tự là xâu đối xứng (trường hợp tầm thường). III. Kiểm tra tính đối xứng của xâu ký tự Để kiểm tra một xâu ký tự S có đối xứng không, ta thực hiện như sau: đặt i = 1; j = length(S); Lặp lại chừng nào còn i<j Nếu S[i] <> S[j] thì trả về false và kết thúc lặp Trái lại thì tăng i, giảm j. Trả về true. IV. Khúc con và xâu con Cần chú ý phân biệt hai khái niệm khúc con và xâu con. Khúc con (hoặc đoạn con) của xâu ký tự S là một xâu ký tự gồm các ký tự liên tiếp của xâu S. Nếu xâu S có N ký tự thì nó có không quá N*N khúc con. Để duyệt qua hết các khúc con của xâu S, ta dùng cách sau: Đặt N = length(S). Duyệt với i từ 1 đến N-1 Duyệt với j từ i + 1 đến N {Làm việc với khúc con S[i..j]} Xâu con của xâu ký tự S là một xâu ký tự, nhận được từ S bằng cách xóa đi một số ký tự nào đó của S (các ký tự còn lại vần giữ nguyên thứ tự trước sau như ở trong S). Nếu xâu S có N ký tự thì nó có đến 2N xâu con, một số lượng rất lớn, vì vậy rất khó (và thường không) duyệt hết các xâu con của S. Rõ ràng khúc con cũng là xâu con nhưng xâu con chưa chắc đã là khúc con. Ví dụ với xâu ‘1a2b34cde’ thì các xâu ‘1a2’ ‘b34c’ là các khúc con (và cũng là xâu con) còn ‘1234’ ‘abcde’ là các xâu con (nhưng không phải là khúc con).. GỢI Ý CÁCH GIẢI Bài 1. - Tạo hàm DoiXung(ss) để kiểm tra tính đối xứng của xâu ss. Khởi tạo dx = true, ls = length(ss), l2 = ls / 2. Duyệt với j từ 1 đến l2 Nếu ss[j] <> ss[ls-j+1] thì dx = false, kết thúc lặp Đặt DoiXung = dx - Tìm đoạn con đối xứng dài nhất đầu tiên của xâu S Khởi tạo l0 = length(S), D = 0, K = ''. Duyệt với i từ 1 đến l0 Duyệt với j từ 1 đến l0-i+1.

<span class='text_page_counter'>(4)</span> tg := copy(S,i,j) Nếu DoiXung(tg) thì {Nhớ lại kết quả} ls := length(tg); Nếu D<ls thì {nhớ lại kết quả} D = ls {Độ dài} K = tg {xâu con} Bài 2. - Tạo hàm DoiXung(ss) để kiểm tra tính đối xứng của xâu ss (tương tự ở bài 1). - Tạo lệnh SapXep(st, vtd, hg) để sắp xếp xâu con st ở vị trí đầu vtd, theo hướng hg (hg = 1: sắp xếp tăng, hg = -1: sắp xếp giảm). Khởi tạo lst = length(st), lst1 = lst – 1. delete(S,vtd,lst) {Xóa xâu con st khỏi xâu S} Duyệt với i từ 1 đến lst1 Duyệt với j từ i+1 đến lst Nếu (ord(st[i])-ord(st[j]))*hg>0 thì t = st[i] st[i] = st[j] st[j] = t Insert(st,S,vtd) {Chèn xâu st trở lại xâu S} - Tìm các xâu chữ và các xâu số trong S: Đặt i = 1 Lặp lại cho đến khi i> length(S) Đặt hg = 1 Nếu S[i] là chữ cái thì đặt hg = -1 st := ''; j := i; k := i; Lặp lại đến khi (S[j] là chữ cái và hg = 1) hoặc (S[j] là chữ số và hg = -1) đặt st = st + S[j] tăng j Nếu DoiXung(st) thì Nếu hg = -1 then {nhớ lại xâu chữ} Tăng skc xkc := xkc + st + ' ' Trái lại {nhớ lại xâu số} inc(sks) xks := xks + st + ' ' SapXep(st,k,hg) Đặt i = j Bài 3. - Tạo hàm DX(ii, jj) để kiểm tra tính đối xứng của xâu khúc con từ ii đến jj của xâu S. - Dùng hàm đó để tìm tâm đối xứng của S: Đặt N = length(S), tam = (N + 1) div 2, it = tam, jt = tam lmax = 1 {độ dài xâu đối xứng dài nhất} kcmin = N {khoảng cách tự tâm đến tâm đối xứng} Duyệt với i từ 1 đến n+1 Duyệt với j từ i+1 đến N Nếu DX(i,j) thì Đặt l = j-i+1 {độ dài xâu đối xứng tìm được} Nếu lmax <= l thì {chọn xâu dài hơn} lmax = l tt = (i + j) div 2 {tâm của xâu} kc = abs(tt-tam) {khoảng cách từ tâm đến tâm của xâu mới} nếu kcmin > kc thì {chọn xâu gần tâm hơn} đặt kcmin = kc, it = i, jt = j - Tạo hàm ConGap(ch, vt, phia) để kiểm tra xem có còn gặp ký tự ở biến ch ở phía đối diện hay không (phia = ‘T’: phía trái, phía = ‘P’: phía phải) Nếu (phia = 'T') thì đặt x := copy(S,1,vt) trái lại đặt x := copy(S,vt,N-vt+1) ConGap = (pos(ch,x)>0) - Tìm xâu con đối xứng dài nhất của xâu S Đặt T := copy(S,it,jt-it+1);.

<span class='text_page_counter'>(5)</span> Giảm it, tăng jt {mở rộng sang hai biên của xâu S} Lặp lại khi mà (it>=1) và (jt<=N) Đặt cgp = ConGap(S[it],jt,'P'), cgt = ConGap(S[jt],it,'T') Nếu S[it] = S[jt] thì Đặt T = S[it] + T + S[jt], giảm it, tăng jt Trái lại thì {S[it] <> S[jt]} Nếu không cgt và không cgp thì Giảm it, tăng jt Trái lại thì Nếu không cgp thì giảm it trái lại {bo S[it]} Nếu không cgt thì tăng jt {bo S[jt]} Trái lại giảm it {bo S[it]}. DỮ LIỆU ĐỂ KIỂM TRA BÀI 1 Tệp DXDAU.INP (chú ý: dữ liệu kéo dài đến dòng tụt vào tiếp theo) ACBC NANGNANG BNANGNANG IKACOBEGIGEBOCAHTM ABCDEFGHIHGFEDCBAIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZ ABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIIHGFEDCBAJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQ RSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZ ABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIGHIIHGIHGFEDCBAIHG FEDCBAJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZABC DEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZ. Tệp DXDAU.OUT 3 2 4 CBC 7 1 7 NANGNAN 7 2 8 NANGNAN 13 3 15 ACOBEGIGEBOCA.

<span class='text_page_counter'>(6)</span> 17 1 17 ABCDEFGHIHGFEDCBA 18 26 43 ABCDEFGHIIHGFEDCBA 24 51 74 ABCDEFGHIGHIIHGIHGFEDCBA. DỮ LIỆU ĐỂ KIỂM TRA BÀI 2 Tệp SXXAU.INP df443gfg234432jgudit7e7733 dfgfg234432jgudit7443e77334 df4437gfg234432jgudite7733567 df443231gfg234432jgudit7e2237733 df443447gfg2344321090jgudit7e7733 df443gfg234432jgudit74432egaqt7733 df443gfg234432jgudit74435e7733ghptu Tệp SXXAU.OUT 2 [gfg e] 2 [234432 7] fd344ggf223344utjigd7e3377 1 [e] 1 [234432] ggffd223344utjigd3447e33477 1 [gfg] 1 [234432] fd3447ggf223344utjiged3356777 2 [gfg e] 2 [234432 7] fd123344ggf223344utjigd7e2233377 2 [gfg e] 1 [7] fd344447ggf0012233449utjigd7e3377 1 [gfg] 1 [234432] fd344ggf223344utjigd23447tqgea3377 2 [gfg e] 1 [234432] fd344ggf223344utjigd34457e3377utphg. DỮ LIỆU ĐỂ KIỂM TRA BÀI 3 Tệp XAUDX.INP MADAM abcbd esystem edbabcd message azbzczdzez stackexchange 00_11_22_33_222_1_000 abcdefg_hh_gfe_1_d_2_c_3_ba Tệp XAUDX.OUT 5 MADAM 3 bcb 5 esyse 5 dbabd 4 esse 5 zzczz 5 acxca 18 00_1_22_33_22_1_00 18 abcdefg_hh_gfedcba.

<span class='text_page_counter'>(7)</span> MÃ NGUỒN BÀI 1 (Tệp DXDAU.PAS). {Phan khai bao chung} uses crt; const tentep = 'DXDAU'; {Ten tep} var S: string; {Dau vao} D: byte; {Dau vao} K: string; {Dau ra} soPA, pa: byte; {QL phuong an} f: text; {Bien tep} {Dem so phuong an} procedure DemSoPA; BEGIN assign(f, tentep+'.INP'); reset(f); SoPA := 0; while (not EOF(f)) do begin readln(f); inc(SoPA);. end; close(f); END; {Doc du lieu cua phuong an pa} procedure DocPA; var i: integer; BEGIN assign(f, tentep+'.INP'); reset(f); {Bo qua cac pa truoc} i:=1; while (i<pa) do begin readln(f); inc(i); end; {Doc du lieu cua phuong an pa} read(f,S); close(f); END;.

<span class='text_page_counter'>(8)</span> {Kiem tra tinh doi xung} function DoiXung(ss: string): boolean; var ls,l2,j: integer; dx: boolean; BEGIN dx := true; ls := length(ss); l2 := ls div 2; for j:= 1 to l2 do if ss[j] <> ss[ls-j+1] then begin dx := false; break; end; DoiXung := dx; END; {Loi giai} Procedure DoanConDX; var i, i1, j, l0, ls: integer; tg: string; BEGIN l0 := length(S); D := 0; K := ''; for i:=1 to l0 do for j:=1 to l0-i+1 do begin tg := copy(S,i,j); ls := length(tg); if DoiXung(tg) then. begin if D<ls then begin D := ls; K := tg; end; end; end; END; {Ghi ket qua ra man hinh va tep tin} procedure GhiKQ; BEGIN writeln(D,' ',K); assign(f, tentep+'.OUT'); if pa<=1 then rewrite(f) else append(f); writeln(f,D,' ',K); close(f); END; {Chuong trinh chinh} BEGIN clrscr; docSoPA; for pa:=1 to soPA do begin docPA; DoanConDX; GhiKQ; end; writeln; write('Da xong. Nhan ENTER de thoat.'); readln; END. GIẢI THÍCH MÃ NGUỒN BÀI 1. 1. Chương trình chính. Sau khi gọi lệnh DemSoPA, vòng lặp For gọi các lệnh DocPA, DoanConDX, và GhiKQ. 2. Lệnh DemSoPA: đếm số phương án có trong tệp dữ liệu. 3. Lệnh DocPA: đọc dữ liệu của phương án thứ pa. 4. Lệnh GhiKQ: ghi kết quả ra màn hình và tệp tin. 5. Lệnh DoanConDX: Tìm khúc con đối xứng dài nhất đầu tiên và độ dài của nó, thuật giải đã nêu ở phần Gợi ý cách giải..

<span class='text_page_counter'>(9)</span> MÃ NGUỒN BÀI 2 (Tệp SXXAU.PAS) {Phan khai bao chung} uses crt; const tentep = 'SXXAU';.

<span class='text_page_counter'>(10)</span>

<span class='text_page_counter'>(11)</span>

<span class='text_page_counter'>(12)</span>

<span class='text_page_counter'>(13)</span>

<span class='text_page_counter'>(14)</span>

<span class='text_page_counter'>(15)</span>

<span class='text_page_counter'>(16)</span>

<span class='text_page_counter'>(17)</span>

<span class='text_page_counter'>(18)</span>

<span class='text_page_counter'>(19)</span>

<span class='text_page_counter'>(20)</span>

<span class='text_page_counter'>(21)</span>

<span class='text_page_counter'>(22)</span>

<span class='text_page_counter'>(23)</span>

<span class='text_page_counter'>(24)</span> dx := false; break; end; DoiXung := dx; END; {Sap xep} procedure SapXep(st: string; vtd: byte; huong: integer); var lst, lst1, i, i1, j: byte; t: char; BEGIN lst := length(st); lst1 := lst - 1; delete(S,vtd,lst); for i := 1 to lst1 do begin i1 := i + 1; for j:=i1 to lst do if (ord(st[i])-ord(st[j]))*huong>0 then begin t := st[i]; st[i] := st[j]; st[j] := t; end; end; insert(st,S,vtd); END; {Sap xep lai xau theo yeu cau} Procedure SapXepXau; var i, i1, j, k, l, huong: integer; st: string; BEGIN sks := 0; skc := 0; xks := '['; xkc := '['; i := 1; repeat huong := 1; if S[i] in ['a'..'z'] then huong := -1; st := ''; j := i; k := i; repeat st := st + S[j]; inc(j); until ((S[j] in chucai) and (huong = 1)) or ((S[j] in chuso) and (huong = -1)) or (j>length(S)); if DoiXung(st) then if huong = 1 then begin inc(skc); xkc := xkc + st + ' ';.

<span class='text_page_counter'>(25)</span> end else begin inc(sks); xks := xks + st + ' '; end; SapXep(st,k,huong); i:=j; until i>length(S); delete(xks,length(xks),1); xks := xks + ']'; delete(xkc,length(xkc),1); xkc := xkc + ']'; END;. if pa<=1 then rewrite(f) else append(f); writeln(f,sks,' ',xks,' ',skc,' ',xkc,' ',S); close(f); END;. {Ghi ket qua ra man hinh va tep tin} procedure GhiKQ; BEGIN writeln(sks,' ',xks,' ',skc,' ',xkc,' ',S); assign(f, tentep+'.OUT');. {Chuong trinh chinh} BEGIN clrscr; docSoPA; for pa:=1 to soPA do begin docPA; SapXepXau; GhiKQ; end; writeln; write('Da xong. Nhan ENTER de thoat.'); readln; END. GIẢI THÍCH MÃ NGUỒN BÀI 2. 1. Chương trình chính. Sau khi gọi lệnh DemSoPA, vòng lặp For gọi các lệnh DocPA, SapXepXau, và GhiKQ. 2. Lệnh DemSoPA: đếm số phương án có trong tệp dữ liệu. 3. Lệnh DocPA: đọc dữ liệu của phương án thứ pa. 4. Lệnh GhiKQ: ghi kết quả ra màn hình và tệp tin. 5. Lệnh SapXepXau: Tìm các thông tin và sắp xếp lại xâu theo yêu cầu, thuật giải đã nêu ở phần Gợi ý cách giải.. MÃ NGUỒN BÀI 3 (Tệp XAUDX.PAS).

<span class='text_page_counter'>(26)</span> {Phan khai bao chung} uses crt; const tentep = 'XAUDX';. {Ten tep}. var S: string; T: string;. {Dau vao} {Dau ra}.

<span class='text_page_counter'>(27)</span>

<span class='text_page_counter'>(28)</span>

<span class='text_page_counter'>(29)</span>

<span class='text_page_counter'>(30)</span>

<span class='text_page_counter'>(31)</span>

<span class='text_page_counter'>(32)</span>

<span class='text_page_counter'>(33)</span> dec(jj); end; DX := true; END; {Tim xau doi xung gan tam nhat cua xau S} Procedure TimTamDX; var n1, i, i1, j, tt, lmax, l, kcmin, kc: byte; BEGIN N := length(S); n1 := N - 1; tam := (N + 1) div 2; it := tam; jt := tam; lmax := 1; kcmin := N; for i := 1 to n1 do begin i1 := i + 1; for j:= i1 to N do if DX(i,j) then begin l := j-i+1; if lmax <= l then {chon xau dx dai hon} begin lmax := l; tt := (i + j) div 2; kc := abs(tt-tam); if kcmin > kc then {chon xau dx gan tam hon} begin kcmin := kc; it := i; jt := j; end; end; end; end; END; {con gap ch o phia tuong ung} function ConGap(ch: char; vt: byte; phia: char):boolean; var x: string; BEGIN if (phia = 'T') then x := copy(S,1,vt) else x := copy(S,vt,N-vt+1); ConGap := (pos(ch,x)>0); END; {Tim xau con doi xung T cua xau S} Procedure TimT; var cgt, cgp: boolean; BEGIN.

<span class='text_page_counter'>(34)</span> T := copy(S,it,jt-it+1); dec(it); inc(jt); while (it>=1) and (jt<=N) do begin cgp := ConGap(S[it],jt,'P'); cgt := ConGap(S[jt],it,'T'); if S[it] = S[jt] then begin T := S[it] + T + S[jt]; dec(it); inc(jt); end else {S[it] <> S[jt]} if (not cgt) and (not cgp) then begin {bo ca S[it] va S[jt]} dec(it); inc(jt); end else if (not cgp) then dec(it) else {bo S[it]} if (not cgt) then inc(jt) else dec(it); {bo S[jt]} end; END; {Ghi ket qua ra man hinh va tep tin}. procedure GhiKQ; BEGIN assign(f, tentep+'.OUT'); if pa<=1 then rewrite(f) else append(f); writeln(length(T),' ',T); writeln(f,length(T),' ',T); close(f); END; {Chuong trinh chinh} BEGIN clrscr; DemSoPA; for pa:=1 to soPA do begin docPA; TimTamDX; TimT; GhiKQ; end; writeln; write('Da xong. Nhan ENTER de thoat.'); readln; END.. GIẢI THÍCH MÃ NGUỒN BÀI 3 1. Chương trình chính. Sau khi gọi lệnh DemSoPA, vòng lặp For gọi các lệnh DocPA, TimTamDX, TimT, và GhiKQ. 2. Lệnh DemSoPA: đếm số phương án có trong tệp dữ liệu. 3. Lệnh DocPA: đọc dữ liệu của phương án thứ pa. 4. Lệnh GhiKQ: ghi kết quả ra màn hình và tệp tin. 5. Lệnh TimTamDX: Tìm vị trí đầu it và vị trí cuối jt của tâm đối xứng, thuật giải đã nêu ở phần Gợi ý cách giải. Lệnh này gọi hàm DX(i,j) để kiểm tra tính đối xứng của khúc con từ i đến j của xâu S. 6. Lệnh TimT: Tìm xâu con đối xứng dài nhất T của xâu S, thuật giải đã nêu ở phần Gợi ý cách giải. Lệnh này gọi hàm ConGap(ch,vt,phia) để kiểm tra xem có còn gặp ký tự ở biến ch bên phía đối diện không..

<span class='text_page_counter'>(35)</span>

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×