Dữ liệu vào: Cho trong file văn bản KITU.INP có cấu trúc nh sau: - Dòng 1: Ghi các kí tự của xâu St, các kí tự đợc viết liền nhau.. Dữ liệu ra: Ghi ra file văn bản KITU.OUT theo cấu trúc
Trang 1Sở GIáO DụC Và ĐàO TạO
năm học 2008-2009
môn: tin học – KHốI CHUYÊN KHốI CHUYÊN
Đề chính thức
SBD Thời gian 180 phút, không kể thời gian giao đề
đề ra
Sử dụng ngôn ngữ lập trình Pascal để lập trình giải các bài toán sau:
Cho một xâu St gồm các kí tự từ 'a' 'z' có độ dài tối đa không quá 255 kí tự.
Yêu cầu: Hãy tìm tất cả các kí tự xuất hiện trong xâu St ít nhất hai lần.
Dữ liệu vào: Cho trong file văn bản KITU.INP có cấu trúc nh sau:
- Dòng 1: Ghi các kí tự của xâu St, các kí tự đợc viết liền nhau
Dữ liệu ra: Ghi ra file văn bản KITU.OUT theo cấu trúc nh sau:
- Dòng 1: Nếu không tìm đợc kí tự thỏa mãn yêu cầu thì ghi số -1 Ngợc lại thì ghi các kí tự
tìm đợc theo thứ tự tăng dần của mã ASCII, các kí tự ghi liền nhau.
Ví dụ:
KITU.INP KITU.OUT KITU.INP KITU.OUT hchcsucaaf ach hkcsuaf -1
Câu 2 (3,5 điểm): Tìm đờng đi ngắn nhất DUONGDI.PAS
Có N thành phố, các thành phố đợc đánh số từ 1 đến N, biết rằng đờng đi giữa hai thành phố bất kỳ (nếu có) đều là đờng đi hai chiều Sơ đồ mạng lới giao thông của N thành phố này đợc cho bởi ma trận Aij, trong đó:
+ Aij = 0 nếu không có đờng đi từ thành phố i đến thành phố j;
+ Aij > 0 là độ dài đờng đi từ thành phố i đến thành phố j;
+ Aij = Aji;
+ Aii = 0;
Yêu cầu: Hãy xác định đờng đi có độ dài ngắn nhất giữa hai thành phố P và Q.
Dữ liệu vào: Cho trong file văn bản DUONGDI.INP có cấu trúc nh sau:
- Dòng 1: Ghi 3 số nguyên dơng N P Q, các số đợc ghi cách nhau ít nhất một dấu cách (3
≤ N ≤ 100; 3 ≤ P, Q ≤ N; P ≠ Q).
- N dòng tiếp theo: Mỗi dòng ghi N số nguyên không âm là giá trị các phần tử trong ma
trận Aij (0 ≤ Aij ≤ 32767), các số đợc ghi cách nhau ít nhất một dấu cách.
Dữ liệu ra: Ghi ra file văn bản DUONGDI.OUT theo cấu trúc nh sau:
- Dòng 1: Nếu không tồn tại đờng đi từ thành phố P đến thành phố Q thì ghi số -1 Ngợc lại
thì ghi số nguyên dơng S là độ dài đờng đi ngắn nhất tìm đợc.
- Dòng 2: Ghi lộ trình tơng ứng với độ dài đờng đi ngắn nhất tìm đợc, xuất phát từ thành
phố P và kết thúc ở thành phố Q, các số đợc ghi cách nhau ít nhất một dấu cách.
Ví dụ:
DUONGDI.INP DUONGDI.OUT DUONGDI.INP DUONGDI.OUT
4 1 4
0 3 7 10
3 0 4 4
7 4 0 2
10 4 2 0
7
1 2 4 4 1 4 0 3 0 0
3 0 1 0
0 1 0 0
0 0 0 0
-1
Câu 3 (3,5 điểm): Thời điểm gặp mặt GAPMAT.PAS
Một nhóm gồm N học sinh tham gia câu lạc bộ Tin học, các học sinh đợc đánh số từ
1 đến N Biết thời gian mà học sinh i có mặt tại câu lạc bộ là [ai,bi], trong đó ai là thời điểm
Trang 2bắt đầu và bi là thời điểm kết thúc Cô giáo chủ nhiệm câu lạc bộ muốn đến gặp mặt các học sinh trong nhóm
Yêu cầu: Hãy giúp cô giáo chủ nhiệm xác định thời điểm đến câu lạc bộ sao cho gặp đợc
nhiều học sinh trong nhóm nhất
Dữ liệu vào: Cho trong file văn bản GAPMAT.INP có cấu trúc nh sau:
- Dòng 1: Ghi số nguyên dơng N, (1 ≤ N ≤ 32000).
- N dòng tiếp theo: Mỗi dòng ghi 2 số nguyên dơng ai và bi (1 ≤ ai < bi ≤ 32000), các số đợc ghi cách nhau ít nhất một dấu cách.
Dữ liệu ra: Ghi ra file văn bản GAPMAT.OUT theo cấu trúc nh sau:
- Dòng 1: Ghi hai số nguyên dơng K T Trong đó K là số lợng học sinh có mặt ở câu lạc bộ
tại thời điểm T mà cô giáo đến Hai số ghi cách nhau ít nhất một dấu cách.
Giới hạn thời gian thực hiện chơng trình không quá 2 giây đối với 1 bộ dữ liệu vào Trong
đó có 40% bộ dữ liệu vào có giá trị của N> 16000.
Ví dụ:
GAPMAT.INP GAPMAT.OUT GAPMAT.INP GAPMAT.OUT
9 11
==== Hết ====
Sở GIáO DụC Và ĐàO TạO
năm học 2008-2009
môn: tin học – KHốI CHUYÊN KHốI CHUYÊN
Hớng dẫn chấm
I- Ph ơng pháp:
- Giám khảo tạo bộ dữ liệu vào, tính toán kết quả Thực hiện chơng trình của học sinh
và so sánh kết quả.
- Giám khảo có thể sử dụng chơng trình gợi ý dới đây để tính toán kết quả của dữ liệu vào.
- Chơng trình học sinh đúng một bộ test, giám khảo cho 0,5 điểm Nh vậy, nếu một bài
có 3 điểm thì giám khảo phải tạo 6 bộ test.
- Đối với câu 2, nếu học sinh đa ra đợc độ dài đờng đi ngắn nhất, giám khảo cho 1/2 số
điểm Có thể có nhiều lộ trình cùng cho ra một độ dài đờng đi ngắn nhất Nếu học sinh đa
ra phơng án khác với đáp án nhng vẫn đúng thì giám khảo cho điểm tối đa.
- Đối với câu 3:
+ Nếu học sinh đa ra đợc số lợng học sinh lớn nhất tại thời điểm giáo viên đến, giám khảo cho 1/2 số điểm Có thể có nhiều thời điểm giáo viên đến mà cho cùng một kết quả số lợng học sinh lớn nhất Nếu học sinh đa ra phơng án khác với đáp án nhng vẫn đúng thì giám khảo cho điểm tối đa.
2
Trang 3+ Số lợng bộ dữ liệu vào có không gian lớn là 40%, (N>16000).
II- Ch ơng trình gợi ý:
Câu 1 (3,0 điểm): Tìm kí tự
Program Tim_ki_tu;
Const fi='Kitu.inp';
fo='Kitu.out';
Type mmc=Array['a' 'z'] of Byte;
Var A:mmc;
St:String;
f:text;
Procedure Doc;
begin
assign(f,fi);
reset(f);
readln(f,st);
close(f);
end;
procedure xl;
var i:byte;
begin
fillchar(a,sizeof(a),0);
for i:=1 to length(st) do a[st[i]]:=a[st[i]] +1;
end;
procedure xuat;
var ch:char; kt:boolean;
begin
assign(f,fo);
rewrite(f);
kt:=false;
for ch:='a' to 'z' do
if a[ch]>=2 then
begin
kt:=true;
write(f,ch);
end;
if kt=false then write(f,-1);
close(f);
end;
Begin
doc;
xl;
xuat;
End
Câu 2 (3,5 điểm): Tìm đờng đi ngắn nhất
Program Duong_di_ngan_nhat;
Const fi='Duongdi.inp';
fo='Duongdi.out';
MaxN = 101;
vc=32767;
Type mmc=Array[0 MaxN] of Integer;
mhc=Array[0 MaxN] of mmc;
Var A,L:mhc;
B:mmc;
N,P,Q,Top:Byte;
Procedure Doc;
Var i,j:byte; f:text;
Begin
Assign(f,fi);
Reset(f);
Readln(f,N,P,Q);
Trang 4For i:= 1 to N do
Begin
For j:=1 to N do
Begin
Read(f,A[i,j]);
if A[i,j] = 0 then A[i,j]:= vc;
End;
Readln(f);
End;
Close(f);
Fillchar(L,sizeof(L),0);
End;
Procedure xl;
Var i,j,k:Byte;
Begin
For i:=1 to N do
For j:=i+1 to N do
For k:=1 to N do
If (A[i,k] < vc) and (A[k,j] < vc) then
If A[i,k] + A[k,j] < A[i,j] then
Begin
A[i,j]:=A[i,k] + A[k,j];
A[j,i]:=A[i,j];
L[i,j]:=k;
L[j,i]:=k;
End;
End;
Procedure Lay(i,j:Byte);
Begin
if L[i,j] = 0 then
Begin
inc(Top);
B[Top]:=j;
End
Else
Begin
Lay(i,L[i,j]);
Lay(L[i,j],j);
End;
End;
Procedure xuat;
Var i:Byte;f:text;
Begin
Assign(f,fo);
Rewrite(f);
if A[P,Q] < vc then
Begin
Top:=0;
Lay(P,Q);
Writeln(f,A[P,Q]);
Write(f,P, ' ');
For i:= 1 to Top do
Write(f,B[i], ' ');
End
Else
Writeln(f,-1);
Close(f);
End;
BEGIN
Doc;
xl;
4
Trang 5xuat
END
C©u 3 (3,5 ®iÓm): Thêi ®iÓm gÆp mÆt
{$R+,B+,Q+}
const fi='gapmat.in2';
fo='gapmat.out';
type arr1 = array[0 32677] of word;
var a,b:^arr1;
f,g:text;
max,i,j,n,m:longint;
x,y,vt:word;
BEGIN
new(a);
new(b);
assign(f,fi);
reset(f);
readln(f,n);
for i:= 0 to 32000 do
begin
b^[i]:=0;
a^[i]:=0;
end;
for i:= 1 to n do
begin
readln(f,x,y);
a^[x]:=a^[x]+1;
b^[y]:=b^[y]+1;
end;
close(f);
max:=0;
m:=0;
for i:= 1 to 32000 do
begin
m:=m+a^[i]-b^[i-1];
if m>max then
begin
max:=m;
vt:=i ;
end;
end;
assign(g,fo);
rewrite(g);
writeln(g,max,' ',vt);
close(g);
dispose(a);
dispose(b);
END