-
11-09-2009, 05:33 AM #1
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 2
Khoảng cách so với xâu palindrome
Ta định nghĩa khoảng cách giữa hai xâu là số lần xóa hoặc thay thế hoặc thêm vào một ký tự của xâu này để được xâu kia với điều kiện số lần thực hiện là ít nhất. Ta luyện tập chút ít nhé! Nào, hãy tìm khoảng cách giữa một xâu s1 và xâu palidrome tạo thành từ s1. Quy ước:
- Xóa kí tự thứ k: del(k).
- Thêm kí tự thứ k: ins(k).
- Thay thế kí tự thứ k bằng kí tự x: replace(k,x).
INPUT:
Một dòng là xâu s1.
OUTPUT:
- Dòng một in khoảng cách n.
- N+1 dòng tiếp theo là các phép biến đổi từ s1->palidrome.
Nào ta cùng luyện tập!
-
11-20-2009, 11:55 AM #2
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 2
Quy hoạch động f[i,j] là số thao tác ít nhất để đoạn từ i->j thành palin
-
11-22-2009, 06:37 PM #3
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 3
Bạn vít thế thì mỗi bạn hỉu thui. Qhd có cơ sở qhd mà, khôg cho thì ai mà bít.
-
11-22-2009, 10:03 PM #4
Junior Member
- Ngày tham gia
- Nov 2015
- Bài viết
- 0
http://diendantinhoc.vn/showthread.php?p=81531#post81531
còn mỗi phần truy vết thôi !!!
-
11-23-2009, 05:36 AM #5
Junior Member
- Ngày tham gia
- Nov 2015
- Bài viết
- 0
Gửi bởi elnino_020993
-
01-07-2010, 08:03 PM #6
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 1
sao ko giai bai nay lun di?
goi y kiu do ai ma ko bit chu
-
01-08-2010, 12:21 AM #7
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 3
"Khoảng cách" giữa 2 xâu kí tự.
Giả sử với một xâu kí tự, ta có thể tiến hành các phép biến đổi sau:
- Thay một kí tự bất kì bởi một kí tự khác, chẳng hạn: test -> text;
- Xóa một kí tự bất kì, chẳng hạn: text -> ext hoặc text -> txt;
- Thêm một kí tự bất kì vào một vị trí bất kì, chẳng hạn: SP -> SP2;
Dữ liệu vào được cho bởi file văn bản DISTANCE.INP gồm 2 dòng, dòng 1 là xâu S1, dòng 2 là xâu S2 (S1, S2 xâu có không quá 100 kí tự).
Kết quả ghi ra file văn bẳn DISTANCE.OUT như sau: dòng đầu là khoảng cách từ S1 đến S2, các dòng còn lại, mỗi dòng ghi một phép biến đổi theo thứ tự từ S1 có được S2.
Ví dụ:
Mã:DISTANCE.INP 1A3BC 13AbDISTANCE.OUT 3 1A3BC - Thay C/5/b => 1A3Bb 1A3Bb - Thay B/4/A => 1A3Ab 1A3Ab - Xoa A/2 => 13AbMã:{+B-, Q+, R+} {$M 65500, 0, 655360} Uses Crt; Const MaxN = 100; fi = 'DISTANCE.INP'; fo = 'DISTANCE.OUT'; Type xau = String[MaxN]; AByte = Array[0..MaxN, 0..MaxN] Of Byte; Var a, b : xau; q : AByte; m, n : Byte; f : Text; Procedure KhoiTao; Begin Assign(f, fi); Reset(f); Readln(f, a); Readln(f, b); m := Length(a); n := Length(b); Close(f); End; Function Min(a, b, c : Byte) : Byte; Begin If a > b Then a := b; If a > c Then a := c; Min := a; End; Procedure InMang; Var i, j : Byte; Begin Writeln('A = ',a); Writeln('B = ',b); Write(#32 : 4); For i := 1 To n Do Write(b[i] : 3); Writeln(#10#13); For i := 1 To m Do Begin Write(a[i] : 3, #32); For j := 1 To n Do Write(q[i, j] : 3); Writeln; End; End; Procedure TaoQHD; Var i, j, dt : Byte; ok : Boolean; Begin For i := 1 To m Do q[i, 0] := i; For j := 1 To n Do q[0, j] := j; q[0, 0] := 0; For i := 1 To m Do For j := 1 To n Do Begin If a[i] = b[j] Then dt := 0 Else dt := 1; q[i, j] := Min(q[i-1, j-1] + dt, q[i-1, j] + 1, q[i, j-1] + 1); End; End; Procedure LanNguoc; Var i, j, gt : Byte; Begin i := m; j := n; While (i > 0) And (j > 0) And (q[i, j] <> 0) Do Begin gt := q[i, j] - 1; If q[i-1, j-1] = gt Then Begin Write(f, a, ' - '); Write(f, 'Thay ', a[i], '/', i, '/', b[j]); a[i] := b[j]; Writeln(f, ' => ', a); Dec(i); Dec(j); End Else If q[i-1, j] = gt Then Begin Write(f, a, ' - '); Write(f, 'Xoa ', a[i], '/', i); Delete(a, i, 1); Writeln(f, ' => ', a); Dec(i); End Else If q[i, j-1] = gt Then Begin Write(f, a, ' - '); Write(f, 'Them ', b[j], '/', i+1); Insert(b[j], a, i+1); Writeln(f, ' => ', a); Dec(j); End Else If q[i, j] = q[i-1, j-1] Then Begin Dec(i); Dec(j); End; End; If (i = 0) And (j <> 0) Then For i := j DownTo 1 Do Begin Write(f, a, ' - '); Write(f, 'Them ', b[i], '/', 1); Insert(b[i], a, 1); Writeln(f, ' => ', a); End Else If (j = 0) And (i <> 0) Then Begin For j := i DownTo 1 Do Begin Write(f, a, ' - '); Write(f, 'Xoa ', a[1], '/', 1); Delete(a, 1, 1); Writeln(f, ' => ', a); End; End; End; Procedure Xuly; Begin TaoQHD; InMang; Assign(f, fo); Rewrite(f); Writeln(f, q[m, n]); LanNguoc; Close(f); End; BEGIN KhoiTao; Xuly; END.
-
06-19-2011, 10:55 PM #8
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 3
Thế nếu thêm 1 cách biển đổi nữa là đổi chỗ 2 kí tự liên tiếp thì phần code thay đổi thế nào?
Theo điều tra tình hình sử dụng thuốc lá ở người trưởng thành năm 2020 do Bộ Y tế triển khai, ngày nay tỷ lệ đàn ông Việt Nam hút thuốc đang ở mức 42,3%. Không chỉ có khả năng gây ung thư và một...
Những thói quen khiến "cuộc vui" của hai người trở nên... dở dang