Một số bài toán về dạng bài tập xâu palinrome trong chuyên đề bồi dưỡng học sinh giỏi về kiểu dữ liệu xâu

19 26 0
Một số bài toán về dạng bài tập xâu palinrome trong chuyên đề bồi dưỡng học sinh giỏi về kiểu dữ liệu xâu

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

MỤC LỤC Trang Mở đầu 1.1 Lí chọn đề tài 1.2 Mục đích nghiên cứu 1.3 Đối tượng nghiên cứu 1.4 Phương pháp nghiên cứu .3 Nội dung sáng kiến kinh nghiệm 2.1 Cơ sở lý luận sáng kiến kinh nghiệm 2.2 Thực trạng vấn đề trước áp dụng sáng kiến kinh nghiệm 2.3 Các sáng kiến kinh nghiệm giải pháp sử dụng để giải vấn đề Nội dung sáng kiến kinh nghiệm I Cách khai báo truy xuất đến phần tử xâu Cách khai báo Cách nhập/xuất Truy cập phần tử xâu ký tự II Các thao tác xâu Phép cộng xâu Phép so sánh Các thủ tục hàm chuẩn xử lý xâu ký tự III Dạng tập Palindrome 2.4 Hiệu sáng kiến kinh nghiệm hoạt động giáo dục, với thân, đồng nghiệp nhà trường 18 Kết luận, kiến nghị .18 3.1 Kết luận 18 3.2 Kiến nghị .18 Tài liệu tham khảo .19 Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên 1 Mở đầu 1.1 Lí chọn đề tài Do năm học 2020 – 2021 thân nhà trường giao cho nhiệm vụ cầm đội tuyển dự thi học sinh giỏi cấp tỉnh cho năm học tới với đồng chí nhóm chun mơn Và thân giao nhiệm vụ dạy liệu kiểu xâu Vì mà thân tơi thu thập số toán thường gặp dạng tập xâu Palindrome để ôn cho học sinh chuyên đề bồi dưỡng học sinh giỏi kiểu liệu xâu Mặt khác thực tế liệu vào toán kiểu liệu khác nhau, để xử lý thường đưa kiểu liệu dạng liệu chuẩn liệu có cấu trúc, kiểu liệu kiểu xâu Qua q trình giảng dạy lớp đặc biệt tham gia dạy bồi dưỡng học sinh giỏi nhận thấy liệu kiểu xâu thường gặp nhiều toán vận dụng linh hoạt thao tác xử lý kiểu liệu xâu vào tốn thực tế khơng phải dễ Với mong muốn giúp em đội tuyển nắm kiến thức vê xâu áp dụng vào giải toán dạng xâu Palindrome cách tốt Tơi sưu tầm số tốn dạng xâu Palindrome cách giải toán Giúp em đội tuyển nắm kiến thức kiểu xâu nói chung dạng tốn xâu Palindrome nói riêng 1.2 Mục đích nghiên cứu Nhận thấy việc đưa toán kiểu liệu xâu phương pháp giải chúng ngôn ngữ lập trình cụ thể cần thiết, nhằm giúp cho học sinh hệ thống lại kiến thức thao tác kiểu liệu xâu phân dạng tập, từ áp dụng cho tốn cụ thể Tơi đề mục đích cụ thể việc thực đề tài: - Giới thiệu cách khai báo truy xuất đến kiểu liệu xâu, phần đề cập đến kiểu liệu xâu có độ dài lớn thường xảy thực tế mà chưa đề cập sách giáo khoa ansistring -Giới thiệu số phép toán kiểu liệu xâu, phần có cung cấp thêm số hàm thủ tục chưa đề cập 12 sách giáo khoa tin học 11, có đưa số ví dụ tương ứng để học sinh dễ dàng vận dụng vào toán thực tiễn -Hệ thống số toán dạng Palindrome giúp cho học sinh giải tập có liên quan dạng Cấu trúc nội dung: Khai báo truy xuất đến phần tử kiểu xâu Các hàm thủ tục chuẩn xâu Dạng tập Palindrome Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên 1.3 Đối tượng nghiên cứu Bài viết SKKN “Phương pháp giải số toán dạng tập xâu Palindrome chuyên đề bồi dưỡng học sinh giỏi kiểu liệu xâu” có đối tượng nghiên cứu toán kiểu liệu xâu dạng xâu Palindrome 1.4 Phương pháp nghiên cứu Để hoàn thành SKKN tơi sử dụng kết hợp nhiều phương pháp, phương pháp chủ yếu nghiên cứu tài liệu, tham khảo góp ý đồng nghiệp chun mơn cấp Nội dung sáng kiến kinh nghiệm 2.1 Cơ sở lí luận sáng kiến kinh nghiệm Để xử lý chuỗi văn bản, Pascal đưa kiểu liệu gọi xâu ký tự định nghĩa từ khóa STRING Xâu ký tự liệu bao gồm dãy kí tự bảng mã ASSCII Tuy nhiên độ dài String tối đa 255 mà thực tế ta thường gặp xâu có độ dài lớn cỡ hàng ngàn ký tự, có cách khắc phục điều đó, tơi xin trình bày số nội dung mà thân tìm hiểu vận dụng có hiệu q trình giảng dạy bồi dưỡng đội tuyển 2.2 Thực trạng vấn đề trước áp dụng sáng kiến kinh nghiệm Trong trình dạy học tin học nhận thấy môn tin học lớp 11 ln làm học sinh thấy lúng túng khó hiểu khó học khó nhập mơn em ln cảm thấy mơn tin học lớp 11 q khó em Và thực tế sau nhiều năm giảng dạy môn tin học thấy em cảm thấy khó hiểu khó học mơn.Vì giáo viên cần hướng dẫn học sinh làm tập môn tin cách chi tiết dễ hiểu để giúp phần đơng học sinh hiểu nói đặc biệt em đội tuyển Qua nhiều năm giảng dạy môn học đúc kết số kinh nghiệm nhằm giúp em tiếp thu kiến thức tốt hơn, từ mà chất lượng giảng dạy học tập học sinh ngày nâng lên Tuy nhiên học sinh đội tuyển nhiều năm thân chưa cầm đội tuyển năm nhà trường giao cho cầm đội tuyển năm học tới với đồng nghiệp nhóm Vì mà thân trăn trở đưa nội dung để giúp em đội tuyển năm tới có kiến thức tốt để thi đạt kết mong đợi Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên 2.3.Các sáng kiến kinh nghiệm giải pháp sử dụng để giải vấn đề Nội dung sáng kiến kinh nghiệm I CÁCH KHAI BÁO VÀ TRUY XUẤT ĐẾN PHẦN TỬ XÂU 1.Cách khai báo: Var: STRING[độ dài xâu]; - Xâu ký tự nhớ chiếm số byte số ký tự cực đại khai báo cộng với byte chứa số ký tự có xâu Độ dài tối đa xâu ký tự 255 - Ngồi có kiểu khai báo khác xâu như: + Shortstring: Chính String + longstring: mảng ký tự có kiểu char Thơng thường kiểu char có kích thước 16 bit nên mảng có kích thước tối đa 16 bit = 65535 ký tự + ansistring (chỉ có free pascal mà khơng có turbo pascal) có kích thước gần 2GB = 230 B nên thường xem vô hạn 2.Cách nhập/xuất: Cách đọc hay viết kiểu STRING tương tự kiểu liệu khác, ta sử dụng thủ tục READ, WRITE Ví dụ: Readln(st); Writeln(st); 3.Truy cập phần tử xâu ký tự: Việc truy cập đến phần tử xâu tương tự mảng chiều thông qua tên biến kiểu STRING số Ví dụ: St := 'Le Thanh Lam'; write(st[4]); -> Kết quả: cho chữ T II CÁC THAO TÁC TRÊN XÂU KÝ TỰ 1.Phép cộng xâu: Ví dụ:st1:=’tin’; st2:=’ hoc’; St=st1 + st2; -> St = ‘tin hoc’ 2.Phép so sánh: Hai xâu ký tự so sánh với phép so sánh =, >, st2 Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên Các thủ tục hàm chuẩn xử lý xâu ký tự a Hàm length(st): cho độ dài thực xâu ký tự st Ví dụ: st:=’tin hoc’ LENGTH(st) cho b Hàm upcase(ch): Cho ký tự hoa ký tự ch Ví dụ: ch:= 'a'; ch:= upcase(ch) → ch = 'A' Ví dụ: Viết đoạn chương trình nhập vào xâu ký tự Đổi xâu sang chữ in hoa in kết hình var s,s1:string; i:integer; begin write('nhap xau s:'); readln(s); s1:=''; for i:=1 to length(s) s1:=s1+ upcase(s[i]); write(s1); readln; end c Hàm Ord(ch): Cho mã ký tự ch bảng mã ASCII Ví dụ: ch:='a'; n:= Ord(ch) → n= 97 d Hàm Chr(n): Cho ký tự có mã n Ví dụ: Viết đoạn chương trình nhập vào xâu ký tự Đổi xâu sang chữ thường in xâu hình theo thứ tự ngược lại * Ý tưởng: Để thực chuyển đổi ký tự ch dạng hoa sang dạng thường trước hết ta sử dụng hàm ord(ch) để lấy mã ký tự đó, sau sử dụng hàm chr(ord(ch)+32) để ký tự thường ký tự hoa ch (vì mã ký tự hoa ch lệch mã ký tự thường tương ứng 32 như: ord('A')=65, ord('a')=97) var s,s1:string; i:integer; begin write('nhap xau s:'); readln(s); s1:=''; for i:=1 to length(s) if s[i] in ['A' 'Z'] then s1:=s1+ chr(ord(s[i])+32) else s1:=s1+s[i]; for i:=length(s1) downto write(s1[i]); readln; end e Thủ tục DELETE(st, pos, num): xóa num ký tự xâu st kể từ vị trí pos xâu Ví dụ: st= ‘tin hoc’; Delete(st,4,4); lúc st cho ‘tin’ f Hàm POS(st1,st2): hàm cho vị trí tìm thấy xâu s1 s2 Ví dụ: POS(‘tin’,‘tin hoc’) = Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên Ví dụ: Viết đoạn chương trình nhập vào xâu ký tự In xâu sau xóa hết ký tự trắng thừa xâu (Ký tự trắng thừa ký tự đầu xâu, cuối xâu xâu có ký tự trắng liên tiếp có ký tự trắng thừa) * Ý tưởng: - Sử dụng hàm Pos(' ',s) để biết vị trí i xuất ký tự trắng sử dụng thủ tục Delete(s,i,1) để xóa ký tự thứ i xâu s - Để xóa ký tự trắng đầu xâu ta thực lệnh: while s[1]=' ' delete(s,1,1); - Để xóa ký tự trắng cuối xâu ta thực lệnh: while s[length(s)] = ' ' delete(s,length(s),1); - Để xóa ký tự trắng xâu ta thực lệnh: while pos(' ',s)0 delete(s, pos(' ',s),1); var s:string; begin write('nhap xau s:'); readln(s); while s[1]=' ' delete(s,1,1); while s[length(s)]=' ' delete(s,length(s),1); while pos(' ',s)0 delete(s,pos(' ',s),1); write(s); readln; end g Thủ tục INSERT(st1, st2, pos): Thủ tục cho kết cách chèn xâu ký tự có tên st1 vào xâu st2 vị trí pos, ký tự đứng sau pos dời phía sau xâu ký tự st2 Ví dụ: st1:= ‘tin ‘; st2:=’hoc kho’; INSERT(st1,st2,5) → st2=’hoc tin kho’; Ví dụ: Viết đoạn chương trình nhập vào xâu s1, s2, s (với xâu s1 xuất lần xâu s) Tìm thay xâu s1 thành xâu s2 xâu s Chẳng hạn: s1 := 'hoc'; s2:= 'bai tap'; s :='hoc tin hoc'; kết sau thay s1 thành s2 s = 'bai tap tin hoc' var s1,s2,s: string; i:byte; begin write('nhap s1:'); readln(s1); write('nhap s2:'); readln(s2); write('nhap xau s:'); readln(s); i:= pos(s1,s); delete(s,i,length(s1)); insert(s2,s,i); Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên write(s); readln; end h Thủ tục STR(value, st): Thủ tục thực việc chuyển đối giá trị kiểu số(value) sang dạng xâu ký tự gán cho biến st Ví dụ: n:=2014; STR(n,st) cho kết xâu st là: st=’2014’; i Thủ tục VAL(st, value,code) đổi xâu ký tự st sang dạng số gán cho biến value, biến đối thành cơng code nhận giá trị ngược lại cho giá trị khác khơng Ví dụ: VAL(‘2014’,value,code) lúc code nhận giá trị value=2014 Ví dụ: Viết đoạn chương trình nhập vào số tự nhiên a có n số Hãy tạo số b từ số a cách in ngược có số xuất a Chẳng hạn số a = 123 b=321 var a,b:Qword; s,s1:string; i,code:longint; begin write('nhap a:'); readln(a); str(a,s); s1:=''; for i:=length(s) downto s1:=s1+s[i]; val(s1,b,code); write(b); readln; end j Hàm CONCAT(s1,s2,…,sn): hàm cho xâu cách nối xâu s1,s2,…,sn lại với Ví dụ: CONCAT(‘hoc ’, ‘tin ’) = ‘hoc tin’; k Hàm COPY(st, pos, num): chép xâu st, num ký tự vị trí pos, Ví dụ: st=’tin hoc’; COPY(st,5,3) = ‘hoc’; Ví dụ: Viết đoạn chương trình nhập vào xâu S (khơng có dấu cách vơ nghĩa) Đưa từ dài xuất xâu S Chẳng hạn: s = 'xin chao ban' →kết tìm từ 'chao' * Ý tưởng: Dùng hàm pos để xác định ví trí ký tự trống xuất xâu s Từ xác định độ dài từ s Nếu ta thực xóa từ xâu s lặp lại thao tác ta tìm từ tiếp theo, đồng thời ta tìm từ có độ dài lớn * Chương trình: var s,tumax:string; begin write('nhap xau s:'); readln(s); Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên while pos(#32,s)0 begin if pos(#32,s)>length(tumax) then tumax:=copy(s,1,pos(#32,s)); delete(s,1,pos(#32,s)); end; writeln(tumax); readln; end III DẠNG BÀI TẬP PALINDROME Phương pháp chung: Xâu Palindrome hay cịn gọi xâu đối xứng, có nghĩa xâu đọc ký tự xâu từ trái sang phải giống từ phải sang trái xâu gọi xâu Palinhdrome Với tập kiểm tra xâu Palindrome hay tìm kiếm xâu có tính chất Palindrome trước hết nên xây dựng hàm kiểm tra tính chất đối xứng xâu với độ phức tạp O(n), sở giải tập khó Bài Xâu Palindrome Cho xâu S có độ dài khơng vượt 10 Kiểm tra xem xâu S có phải xâu Palindrome hay không? * Ý tưởng: Một xâu s có tính chất đối xứng s[i] = s[n-i+1] với i chạy từ đến length(s) div Dựa sở ta xây dựng hàm kiểm tra * Chương trình tham khảo {$MODE OBJFPC} Var s:ansitring {==============} function palindrome(s: string): boolean; var i, n : integer; begin n := length(s); for i := to (n div 2) if s[i] s[n+1-i] then begin palindrome := false; exit; end; palindrome := true; end; {==============} begin write('nhap s:'); readln(s); Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên If palindrome(s) then write('xau doi xung') else write('xau khong doi xung'); end Bài Xâu Palindrome Cho xâu S có độ dài khơng vượt q 1000 kí tự; tìm xâu palindrome dài xâu S * Ý tưởng: Sử dụng phương pháp quy hoạch động cách sử dụng mảng chiều F giá trị F[i, j] = true/false đoạn gồm kí tự từ i đến j S có/khơng palindrome Ta có công thức là: - F[i, i] = True - F[i, j] = F[i+1, j-1]; ( s[i] = s[j] ) - F[i, j] = False; ( s[i] s[j] ) * Đoạn chương trình tham khảo var s:ansistring; n,i,j,d,max,k,csd,csc:longint; F: array[0 1001,0 1001] of boolean; {==========} begin write('nhap s:'); readln(s); FillChar( F, sizeof(F), false ); n:=length(s); max:=1; for i := to n F[i, i] := True; for k := to (n-1) for i := to (n-k) begin j := i + k; F[i, j] := ( F[i+1, j-1] ) and (s[i] = s[j] ); end; for i:=1 to n for j:=1 to n begin d:=j-i+1; if (f[i,j]=true) and (d>max) then begin max:=d; csd:=i; csc:=j; end; end; Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên for i:=csd to csc write(s[i]); readln; end Bài Xâu Palindrome Một xâu gọi đối xứng xâu đọc từ trái sang phải giống đọc từ phải sang trái Chô xâu S tìm số kí tự cần thêm vào xâu S để trở thành xâu đối xứng Dữ liệu vào: xau_dx.inp gồm dòng xâu S xau_dx.inp Xau_dx.out Dữ liệu ra: Ghi vào tệp xau_dx.out edbabcd - Dòng 1: Đưa kí tự cần chèn thêm ec vào - Dịng 2: Các kí tự cần chèn * Ý tưởng: - Gọi S2 xâu đảo xâu S1 ban đầu, T xâu chung dài S1 S2 Khi kí tự S1 khơng thuộc T kí tự cần chèn vào S1 để S1 trở thành xâu đối xứng -Bài tốn trở thành tìm dãy chung dài hai dãy tương ứng xâu S1 S2 phương pháp quy hoạch động -Sử dụng mảng L[0 max,0 max] để lưu độ dài dãy chung dài với L[i,j] độ dài dãy chung dài hai dãy xâu S1 S2 Khi đó: L[0,j]=0 với ∀j = N (N = length(s1)) L[i,0] = víi ∀i = M (M = length(s2)) Với ∀i = M , ∀j = N : Nếu s1[i] = s2[j] Ngược lại L[i,j]:= L[i-1,j-1] + L[i,j] = max{L[i-1,j], L[i,j-1]} * Chương trình tham khảo program xau_doi_xung; const maxn=100; var L:array[0 maxn,0 maxn] of byte; kq:array[1 maxn] of boolean; Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên 10 m:integer; s1,s2:string; f:text; {==========} procedure doc; var i:integer; begin assign(f,'daycon.inp'); reset(f); readln(f,s1); m:=length(s1); s2:=''; for i:=m downto s2:=s2+s1[i]; close(f); end; {==========} function max(x,y:integer):integer; begin if x>y then max:=x else max:=y; end; {===========} procedure xuly; var i,j:integer; begin fillchar(L,sizeof(L),0); for i:=1 to m for j:=1 to m if (s1[i]=s2[j]) then L[i,j]:=L[i-1,j-1]+1 else L[i,j]:= max(L[i-1,j], L[i,j-1]); end; {====================} procedure inkq; var i,j,d:integer; begin assign(f,'daycon.out'); rewrite(f); writeln(f,m-L[m,m]); fillchar(kq,sizeof(kq),false); Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên 11 i:=m; j:=m; while (i>0) and (j>0) if s1[i]=s2[j] then begin kq[i]:=true; dec(i); dec(j); end else if L[i,j]=L[i,j-1] then dec(j) else dec(i); For i:=1 to m if kq[i] = false then write(f,s1[i],' '); close(f); end; {====================} begin doc; xuly; inkq; end Bài Robot công nghiệp Trong nhà máy có trang bị loại Robot cơng nghiệp để thực việc tự động hố gia công sản phẩm Việc gia công sản phẩm Robot thực đồng thời hai sản phẩm lúc theo tiến trình: Với loại thao tác gia công Robot thực sản phẩm thứ xong chuyển sang thực sản phẩm thứ hai Để hoàn thành sản phẩm, Robot thực tới N loại thao tác gia công (N≤ 24) loại thao tác gia cơng thực sản phẩm khơng thực lại sản phẩm Robot hoạt động lệnh dãy ký tự in hoa, ký tự lệnh thực cho loại thao tác gia công Lệnh thực loại thao tác gia công khác ký tự khác Việc đọc dòng lệnh thực lệnh Robot tiến hành theo chu trình sau: + Chu trình thứ nhất: Đọc ký tự thứ nhất, thực lệnh tương ứng sản phẩm thứ Tiếp theo đọc ký tự thứ N, thực lệnh tương ứng sản phẩm thứ hai + Chu trình thứ hai: Đọc ký tự thứ hai, thực lệnh tương ứng sản phẩm thứ Tiếp theo đọc ký tự thứ N-1, thực lệnh tương ứng sản phẩm thứ hai Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên 12 + Chu trình thứ ba: Đọc ký tự ba, thực lệnh tương ứng sản phẩm thứ Tiếp theo đọc ký tự thứ N-2, thực lệnh tương ứng sản phẩm thứ hai Tương tự với chu trình cịn lại để đọc hết dịng lệnh Với xâu S ký tự in hoa có số lượng ký tự chẵn khơng N x 2, xác định xem có phải dịng lệnh Robot nói hay không? Dữ liệu vào: Tệp văn ROBOT.INP có cấu trúc: - Dịng ghi số độ dài xâu S - Dòng thứ ghi xâu S Dữ liệu ra: Tệp văn ROBOT.OUT ghi thơng báo ‘CO’ xâu S dịng lệnh Robot, ngược lại ghi thông báo ‘KHONG’ Tệp ROBOT.INP CBAABC Tệp ROBOT.INP ACBDCA Tệp ROBOT.OUT CO Tệp ROBOT.OUT KHONG * Ý tưởng: Với yêu cầu đề bài, tốn trở thành kiểm tra xâu đầu vào có đối xứng hay khơng? * Chương trình tham khảo: var s:ansistring; n,i:longint; kt:boolean; f,g:text; {==========} begin assign(f,'robot.inp'); reset(f); assign(g,'robot.out'); rewrite(g); readln(f,n); readln(f,s); kt:=true; for i:=1 to n div if s[i] s[n-i+1] then Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên 13 begin kt:=false; break; end; if kt then write(g,'yes') else write(g,'no'); close(f); close(g); end Bài chuỗi đối xứng (nguồn http://vn.spoj.com/submit/NKPALIN) Một chuỗi gọi đối xứng (palindrome) đọc chuỗi từ phải sang trái thu chuỗi ban đầu Yêu cầu: tìm chuỗi đối xứng dài chuỗi s cho trước Chuỗi chuỗi thu xóa số ký tự từ chuỗi ban đầu Dữ liệu vào Gồm dòng chứa chuỗi s, gồm chữ in thường Kết Gồm dòng xâu đối xứng dài xâu s Nếu có nhiều kết quả, cần in kết Giới hạn Chuỗi s có độ dài khơng vượt q 2000 Ví dụ Dữ liệu mẫu lmevxeyzl Kết qủa level program NKPALIN; var s1,s2:ansistring; L:array[0 2000,0 2000] of integer; n:integer; { -} procedure nhap; var ii:integer; begin read(s1); Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên 14 n:=length(s1); for ii:=n downto s2:=s2+S1[ii]; for ii:=1 to n begin L[0,ii]:=0; L[ii,0]:=0; end; end; { -} function max(x,y:integer):integer; begin if x>y then max:=x else max:=y; end; { -} procedure tim; var i,j,k:integer; begin for i:=1 to n for j:=1 to n if s1[i]=s2[j] then l[i,j]:=l[i-1,j-1]+1 else l[i,j]:=max(l[i,j-1],l[i-1,j]); end; { } procedure trace; var i,j,x:integer; kq:ansistring; begin kq:=''; i:=n; j:=n; x:= 0; while (i>0) and (j>0) begin if s1[i]=s2[j] then begin inc(x); kq:=kq+s1[i]; dec(i); dec(j); end Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên 15 else if l[i,j]=l[i,j-1] then dec(j) else dec(i); end; for i:=x downto write(kq[i]); end; { -} begin nhap; tim; trace; end Bài Siêu đối xứng (http://vn.spoj.com/problems/NKSP) Một xâu có độ dài lớn gồm chữ la tinh in thường gọi đối xứng, ta đọc xâu từ trái sang phải từ phải sang trái Một xâu gọi siêu đối xứng, xâu đối xứng tạo thành cách ghép liên tiếp từ nhiều xâu đối xứng Yêu cầu: Cho xâu S, đếm số xâu siêu đối xứng S.( Xâu xâu S đoạn liên tiếp ký tự S) Dữ liệu Chứa xâu S với độ dài không vượt 1000 Kết Ghi số xâu tìm Ví dụ Dữ liệu abc Kết Dữ liệu abacdc Kết const fi=''; var s:ansistring; f:text; A:array[1 1000,1 1000] of boolean; kq,i,j,k,n:longint; {=============} Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên 16 function kt(x,y:longint):boolean; var u,h:longint; begin h:=(y-x) shr 1; for u:=0 to h if S[x+u]S[y-u] then exit(false); exit(true); end; {=============} begin assign(f,fi); reset(f); read(f,s); close(f); kq:=0; n:=length(s); for i:=1 to n-1 for j:=i+1 to n if kt(i,j) then A[i,j]:=true else A[i,j]:=false; for i:=1 to n-3 for j:=i+3 to n for k:=i+1 to j-2 if (A[i,k])and(A[k+1,j]) then begin A[i,j]:=true;break;end; for i:=1 to n-1 for j:=i+1 to n if A[i,j] then inc(kq); write(kq); end Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên 17 2.4 Hiệu sáng kiến kinh nghiệm hoạt động giáo dục, với thân, đồng nghiệp nhà trường Trong năm học 2020-2021 ứng dụng đề tài nghiên cứu học sinh đội tuyển cho năm học tới trường THPT Hậu Lộc tổng hợp số liệu kết đạt em đội tuyển sau: Trong em năm em đạt yêu cầu kiến thức kiểu xâu đặc biệt toán kiểu xâu liên quan tới xâu đối xứng Kết luận, kiến nghị 3.1 Kết luận Với mục đích đặt đề tài làm được: -Giới thiệu cách khai báo truy xuất kiểu liệu xâu (đặc biệt ansistring) -Giới thiệu hàm, thủ tục kiểu liệu xâu -Đặc biệt trình bồi dưỡng học sinh giỏi tơi đúc rút phân tích dạng toán xâu Palindrome giúp học sinh làm toán liên quan tới xâu Palindrome 3.2 Kiến nghị “MỘT SỐ BÀI TOÁN VỀ DẠNG BÀI TẬP XÂU PALINDROME TRONG CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI VỀ KIỂU DỮ LIỆU XÂU” giới thiệu số dạng tập sở tập hợp số đề thi học sinh giỏi để áp dụng vào toán cụ thể Trước hết cần nghiên cứu kĩ thao tác xử lý xâu nhận dạng đề để vận dụng vào dạng toán phù hợp Sáng kiến kinh nghiệm mở rộng cách bổ sung thêm dạng toán thường gặp tiến tới giới thiệu đề thi học sinh giỏi cấp kèm theo lời giải từ lập thành menu giúp học sinh học tập thuận tiện Tôi xin chân thành cảm ơn! XÁC NHẬN CỦA THỦ TRƯỞNG Hậu Lộc, ngày 15 tháng năm 2021 ĐƠN VỊ Tơi xin cam đoan SKKN mình, không chép nội dung người khác Người làm sáng kiến Nguyễn Thị Luyên Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên 18 TÀI LIỆU THAM KHẢO Sách giáo khoa Tin học 11 NXB Giáo dục – năm 2004 Hồ Sĩ Đàm Tài liệu giáo khoa chuyên tin NXB Giáo dục – năm 2009 Trang vn.spoj.com Lê Minh Hoàng Giải thuật lập trình Qch Tuấn Ngọc Ngơn ngữ lập trình pascal Trường THPT Hậu Lộc - Giáo viên thực hiện: Nguyễn Thị Luyên 19 ... BÀI TOÁN VỀ DẠNG BÀI TẬP XÂU PALINDROME TRONG CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI VỀ KIỂU DỮ LIỆU XÂU” giới thiệu số dạng tập sở tập hợp số đề thi học sinh giỏi để áp dụng vào toán cụ thể Trước... thập số toán thường gặp dạng tập xâu Palindrome để ôn cho học sinh chuyên đề bồi dưỡng học sinh giỏi kiểu liệu xâu Mặt khác thực tế liệu vào toán kiểu liệu khác nhau, để xử lý thường đưa kiểu liệu. .. tục kiểu liệu xâu -Đặc biệt trình bồi dưỡng học sinh giỏi tơi đúc rút phân tích dạng toán xâu Palindrome giúp học sinh làm toán liên quan tới xâu Palindrome 3.2 Kiến nghị “MỘT SỐ BÀI TOÁN VỀ DẠNG

Ngày đăng: 20/05/2021, 21:06

Từ khóa liên quan

Mục lục

  • Dữ liệu vào

  • Kết quả

  • Giới hạn

  • Ví dụ

  • Dữ liệu

  • Kết quả

  • Ví dụ

Tài liệu cùng người dùng

Tài liệu liên quan