Bài 12: Kiểu xâu

Phạm Xuân Trường

Câu 1. ( 3 điểm)

Cho một xâu kí tự có độ dài N không quá 5000 kí tự. Hãy tìm cách thêm vào tại vị trí bất kì của của xâu sao cho xâu mới tạo thành là một xâu đối xứng và số kí tự thêm vào là ít nhât.

Dữ liệu vào từ File văn bản BAI1.INP, dòng đầu ghi số N, dòng tiếp theo là xâu kí tự.

Kết quả ghi vào File văn bản BAI2.OUT gồm chỉ 1 giá trị duy nhất là số kí tự cần thêm vào để được xâu đối xứng.

Ví dụ:

Test 1:

BAI1.INP

BAI1.OUT

12

Chuoidoixung

7

Test 2:

BAI1.INP

BAI1.OUT

5

Huynh

2

Phạm Xuân Trường
6 tháng 4 2017 lúc 21:11

uses crt;
const finp='Bai1.inp';
fout='Bai1.out';
type mangc=array[1..10000] of char;
mangl=array[1..10000] of longint;
var f:text;
ch:mangc; a:mangl;
n:longint;
procedure doc;
var i:longint;
begin
assign(f,finp);
reset(f);
readln(f,n);
for i:=1 to n do read(f,ch[i]);
close(f);
end;
procedure ghi;
begin
assign(f,fout);
rewrite(f);
end;
procedure tim;
var i,j,d,k,l:longint;
begin
for i:=n-2 downto 1 do
begin
a[i]:=1;
d:=0;
for j:=i+1 to n do
begin
l:=a[j];
if ch[i]=ch[j] then a[j]:=d+2
else if a[j-1]>a[j] then a[j]:=a[j-1];
d:=l;
end;
end;
end;
procedure xuly;
var i:longint;
begin
fillchar(a,sizeof(a),0);
if n=1 then a[n]:=1
else begin
a[n-1]:=1;
a[n]:=ord(ch[n]=ch[n-1])+1;
end;
if n>2 then tim;
write(f,n-a[n]);
end;
begin
doc;
ghi;
xuly;
close(f);
end.

ai có thể giải thích cho mình bài này đc không

nhất là cái "procedure tim" và mục đích của mảng số nguyên a

mk cảm ơn nhiều


Các câu hỏi tương tự
Duy Nguyễn
Xem chi tiết
Bảo Lê
Xem chi tiết
Phạm Vy
Xem chi tiết
nguyễn linh
Xem chi tiết
Thiên Thiên
Xem chi tiết
Tiên Tiên
Xem chi tiết
Phạm Trần Hoàng Phúc
Xem chi tiết
Dương Chính Nam
Xem chi tiết
Trần Nguyễn NhưÝ
Xem chi tiết