A_AA__A giải vậy là đúng rồi.Hình như pascal co ban chép đề sai. Nguyên mẫu đề là như vầy :
Đề thi tin học trẻ toàn quốc khối B năm 2004
Thời xa xưa , do trình độ hiểu biết còn hạn chế, người ta rất dễ tin vào những điều mê tín. Ví dụ, bộ tộc vùng Flladland cho rằng, để chống lại được bệnh tật và ngăn cản được bước đi cả thần chết, tên của những người dân thuộc bộ tộc bày phải được chọn là một xâu con các ký tự liên tiếp nhau của một tên thiêng W nào đó. Ví dụ, W là "baobaab", thì có thể chọn "ba", "oba","Baab" để làm tên người, còn "bab" hoặc "bob" không thể được dùng để làm điều đó.
Với mỗi tên thiêng W, tù trưởng bộ tộc vùng Fladland rất muốn biết là có thể có tối đa bao nhiêu tên người khác nhau.
Dữ liệu: Vào từ file văn bản HOLYNAME.INP chỉ gồm có một dòng chứa tên thiêng W độ dài không quá 2000 ký tự, trong đó chỉ có các chữ cái la-tinh thường.
Kết quả: Đưa ra file văn bản HOLYNAME.OUT một số nguyên là số lượng tối đa các các tên người có thể đặt khác nhau.
Ví dụ:
HOLYNAME.INP
baobaab
ooooo
HOLYNAME.OUT
23
5
góp thêm 1 bài giải:
Code:
uses crt;
const input='HOLINAME.INP'; output='HOLINAME.OUT';
var a:array[1..100] of string;
k:byte; f1,f2:text; w:string;
function exist(s:string):boolean;
var i:word;
begin
exist:=false;
for i:=1 to k do
if a[i]=s then
begin exist:=true; exit; end;
end;
procedure process(w:string);
var i,j:byte; tam:string;
begin
k:=0;
for i:=1 to length(w) do
begin
tam:='';
for j:=i to length(w) do
begin
tam:=tam+w[j];
if not exist(tam) then
begin
inc(k); a[k]:=tam;
end;
end;
end;
writeln(f2,k); fillchar(a,k,'');
end;
begin
assign(f1,input); reset(f1);
assign(f2,output); rewrite(f2);
while not eof(f1) do
begin
readln(f1,w); process(w);
end;
close(f1); close(f2);
end.
Bookmarks