Sở giáo dục và đào tạo tỉnh quảng bình
trờng thpt chuyên quảng bình
Kỳ thi olimpic tin học 30/04/2004
Đề thi dự kiến
lớp 10
Bài 1: XAUCON.PAS
Cho một xâu X có chiều dài N ký tự (0 < N <= 1000000). Xâu chỉ
gồm hai loại ký tự A và B. Một xâu Y đợc gọi là xâu con của X nếu
thoả mãn các tính chất sau:
+ Y là một đoạn ký tự liên tiếp của xâu X.
+ Có chiều dài L<= M
(M cho trớc, 0 < L<= M <= 14)
+ Có K ký tự A
(0 < K <= M)
Ví dụ: X là:
BABABAABBB
Với M=5 và K=3 thì xâu: ABAA là một xâu con.
Hãy tìm số lợng xâu con của xâu trên.
Dữ liệu vào: Cho trong file văn bản XAUCON.INP có cấu trúc:
Dòng 1: Chứa 3 số N M
K
(N-độ dài xâu X, M-chiều dài lớn nhất
của các xâu con Y, K-số lợng ký tự A. Các số cách nhau một dấu cách
trống.
Dòng 2: N ký tự của xâu X. Các ký tự viết liền nhau.
Dữ liệu ra: Xuất ra file văn bản có tên XAUCON.OUT có cấu trúc:
S : Số lợng xâu con tìm đợc.
Thời gian thực hiện chơng trình bé hơn 2 giây
Ví dụ.
XAUCON.INP
30 14 4
BBABBBAAAAAABBAABBBABBABABABAB
XAUCON.OUT
41
Bài 2: xếp hộp (HOP.PAS)
Trong một phòng máy, có N cái hộp giấy hình hộp chữ nhật. Để cho
gọn ngời ta tìm cách chồng các hộp này lên nhau nhau theo nguyên tắc:
+Chiều cao của mỗi hộp là kích thớc nhỏ nhất trong ba kích thớc của
hộp.
+Các mép của các hộp đợc đặt song song với nhau sao cho không
có phần nào của hộp nằm trên bị chìa ra ngoài so với khối nằm dới.
Hãy tìm phơng án để xếp các hộp chồng lên nhau sao cho độ cao
đạt đợc của khối hộp là lớn nhất.
Dữ liệu vào đợc cho trong file HOP.INP có cấu trúc nh sau:
Dòng 1: Số N
(0
N dòng tiếp: Mỗi dòng ghi ba số nguyên dơng Ai Bi Ci là kích thớc của
mỗi hộp. (Ai, Bi, Ci <=255). Các số ghi cách nhau một dấu cách. Giả sử
số hiệu của hộp đợc đánh số từ 1 đến N theo trình tự bắt đầu cho
đến kết thúc file.
Kết quả ghi ra file HOP.OUT có cấu trúc nh sau:
Dòng 1: Ghi số M là số lợng hộp tìm đợc.
M dòng tiếp theo: Mỗi dòng ghi thông tin về một hộp theo trật tự từ đáy
lên đỉnh của khối hộp. Bao gồm bốn số Ki Ai Bi Ci. Trong đó Ki là số
hiệu của hộp đợc chọn, Ai là kích thớc đáy nhỏ, Bi là kích thớc đáy lớn, Ci
là kích thớcchiều cao. Các số ghi cách nhau một dấu cách trống.
Ví dụ:
HOP.INP
9
7 5
5
4 4
8
1 1
5
4 2
2
5 1
5
4 2
7
2 9
2
1 3
3
5 5
5
HOP.OUT
4
1 5
7
5
9 5
5
5
5 5
5
1
4 2
4
2
§¸P ¸N
Bµi 1: Xaucon
{$R+,Q+}
Const
Fi
=
'Xaucon.inp';
Fo =
'Xaucon.out';
Var F
:
Text;
Mang :
Array[0..10000] Of Char;
N,m,k :
Longint;
Procedure Init;
Var I,KQ : Longint;
Sla,slb,sl,d,c,l:integer;
Ch:Char;
Begin
Kq:=0;
Assign(f,fi);
Reset(f);
Readln(f,n,m,k);
Sla:=0;
Slb:=0;
Kq:=0;
D:=0;
C:=-1;
Sl:=0;
For i:=1 to n do
Begin
Read(f,ch);
C:=(c+1) mod (m+1);
Mang[c]:=ch;
Inc(sl);
If ch='A' then Inc(sla);
If sl>m then
Begin
If mang[d]='A' then
Begin
Slb:=0 ;
Dec(sla);
End
Else
If slb>0 then Dec(slb);
D:=(d+1) mod (m+1);
Dec(sl);
End;
While sla>k do
Begin
If Mang[d]='A' then
Begin
Slb:=0;
Dec(sla);
End
Else
If slb=0 then Dec(slb);
D:=(d+1) mod (m+1);
Dec(sl);
End;
If (slb=0) and (sla=k) then
Begin
L:=d;
While Mang[l]='B' do
Begin
Inc(slb);
L:=(l+1) mod (m+1);
End;
End;
If sla=k then
Inc(kq,slb+1);
End;
Close(f);
assign(f,fo);
Rewrite(f);
Writeln(kq);
Close(f);
End;
Begin
Init;
End.
Bµi 2: HOP.PAS
{$M 63840,0,655360}
Const
Fi='HOP.inp';
Fo='HOP.out';
Type Mang=Array[1..3] Of Byte;
Var Vt:Array[0..5001] Of Integer;
A:Array[0..5000] Of Mang;
N:Integer; F:Text;
Procedure Doi(Var A,b:Longint);
Var T:Longint;
Begin
T:=a;
A:=b;
B:=t;
End;
Procedure Doi1(Var A,b:Integer);
Var T:Integer;
Begin
T:=a;
A:=b;
B:=t;
End;
Procedure Doi2(Var A,b:Byte);
Var T:Byte;
Begin
T:=a;
A:=b;
B:=t;
End;
Procedure Sap(Var T:Mang);
Var I,j:Integer;
Begin
For i:=1 to 2 do
For j:=i+1 to 3 do
If T[i]
Doi2(t[i],t[j]);
End;
Procedure DoiM(Var a,b:Mang);
Var T:mang;
Begin
T:=a;
A:=b;
B:=t;
End;
Procedure Init;
Var S:Array[0..5001] Of Longint;
I,j:Integer;
procedure Sort(l, r: Integer);
var i, j, x: Longint;
begin
i := l; j := r; x := s[(l+r) DIV 2];
repeat
while s[i] < x do i := i + 1;
while x < S[j] do j := j - 1;
if i <= j then
begin
Doim(A[i],a[j]);
Doi(S[i],s[j]);
Doi1(vt[i],vt[j]);
i := i + 1; j := j - 1;
end;
until i > j;
if l < j then Sort(l, j);
if i < r then Sort(i, r);
end;
Begin
Assign(f,fi);
Reset(f);
Readln(f,n);
For i:=1 to n do
Begin
For j:=1 to 3 do Read(f,a[i,j]);
Sap(a[i]);
S[i]:=Longint(a[i,1])*Longint(a[i,2]);
Vt[i]:=i;
End;
Close(f);
Sort(1,n);
End;
Procedure QHD;
Var I,j,max,v,v1:Longint;
Sl,tr:Array[0..5001] Of Longint;
Begin
For i:=1 to n do Sl[i]:=A[i,3];
Fillchar(tr,sizeof(tr),0);
For i:=2 to n do
For j:=i-1 downto 1 do
If Sl[j]+Longint(A[i,3])>sl[i] then
If A[i,1]>=a[j,1] then
If A[i,2]>=a[j,2] then
Begin
Tr[i]:=j;
Sl[i]:=sl[j]+Longint(A[i,3]);
End;
Max:=A[1,3]; V:=1;
For i:=1 to n do
If max
Begin
Max:=sl[i];
V:=i;
End;
Assign(f,fo);
Rewrite(f);
V1:=v;
Max:=0;
While V1>0 do
Begin
Inc(max);
V1:=tr[v1];
End;
Writeln(f,max);
For I:=1 to max do
Begin
Writeln(f,Vt[v],' ',A[v][2],' ',a[v][1],' ',a[v][3]);
End;
Close(f);
End;
Begin
Init;
Qhd;
End.
V:=tr[v];
Sở giáo dục và đào tạo tỉnh quảng bình
trờng thpt chuyên quảng bình
Kỳ thi olimpic tin học 30/04/2004
Đề thi dự kiến
lớp 11
Trên một hòn đảo có rất đông dân c, ngời ta xây một con đờng
cao tốc chạy vòng quanh đảo. Để phục vụ xăng cho xe cộ chạy trên đờng
cao tốc đó, Chi cục xăng dầu quyết định đặt N cây xăng trong đó có
một cây xăng làm trạm trung tâm để tiếp xăng cho các cây xăng còn lại.
Khoảng cách giữa cây xăng thứ i với cây xăng thứ i+1 là Di, khoảng
cách từ cây xăng thứ n đến cây xăng thứ 1 là Dn. Sau khi thống kê và
tính toán ngời ta thấy tại địa điểm đặt cây xăng i có nhu cầu L
(lít/ngày) và chi phí trung bình để vận chuyển 1 lít xăng trên 1 km là 1
đồng.
Hãy tìm một trong N vị trí để đặt trạm xăng trung tâm sao cho
tổng chi phí chuyên chở xăng (S) trong một ngày từ trạm trung tâm
đến các cây xăng là bé nhất. Giả sử xăng ở trạm trung tâm luôn luôn đủ
để cung cấp cho tất cả các cây xăng.
Dữ liệu vào: Cho trong file văn bản XANG.INP có cấu trúc nh sau:
Dòng 1: Chứa số N là số lợng vị trí sẽ đặt cây xăng
(5
N dòng tiếp theo: Mỗi dòng chứa hai số nguyên Li Di cách nhau
một dấu cách
Di là khoảng cách từ cây xăng thứ i đến cây xăng thứ i+1
(0
Li là khả năng tiêu thụ xăng mỗi ngày.
(Li<32768)
Dữ liệu ra: Xuất ra file văn bản XANG.OUT gồm 1 dòng ghi số S (nhỏ
nhất tìm đợc) là tổng chi phí chuyên chở xăng trong một ngày từ trạm
trung tâm đến các cây xăng .
Ví dụ:
XANG.INP
10
11
32
13
14
1000 100
12
23
2 888
11
1 100
XANG.OUT
783
Bài 2: Thuê máy (THUEMAY.PAS)
Một trung tâm vi tính có một siêu máy tính có cài đầy đủ các phần
mềm. Rất nhiều khách hàng muốn thuê máy để làm việc. Tuy nhiên ông
chủ trung tâm không đa ra một mức giá cho thuê cụ thể mà yêu cầu
khách hàng tự đăng ký vào một phiếu thuê máy. Mỗi phiếu thuê gồm có
các thông tin sau:
+ Thời điểm bắt đầu thuê Bi
+ Thời gian thuê
Ti
+ Số tiền phải trả
0
(Bi, Ti nguyên dơng)
Hiện nay, ông chủ trung tâm đã nhận đợc N phiếu đăng ký thuê.
Ông không nhận thêm phiếu đăng ký nào nữa mà chỉ xem xét và chọn
khách hàng để cho thuê.
Hãy giúp ông chủ trung tâm xác định cần làm hợp đồng với những
khách hàng nào sao cho số tiền thu đợc là lớn nhất. Với yêu cầu là khoảng
thời gian thuê của hai ngời khách bất kỳ không đợc giao nhau kể cả
điểm mút.
-Dữ liệu vào đợc cho trong file văn bản THUEMAY.INP có cấu trúc
nh sau:
Dòng 1: Ghi số N
(0
N dòng tiếp theo: Mỗi dòng ghi 3 số Bi Ti Mi là thông tin của phiếu
đăng ký của khách hàng thứ i. Các số ghi cách nhau một dấu cách trống.
-Dữ liệu ra ghi và file văn bản THUEMAY.OUT có cấu trúc nh sau:
Dòng 1: Ghi 2 số P Q cách nhau một dấu cách trống. Trong đó P là số
lợng phiếu đăng ký thuê. Q là tổng số tiền thu đợc trong P hợp đồng đã
chọn ở trên.
Dòng 2: Ghi chỉ số khách hàng mà ông chủ trung tâm sẽ đồng ý cho
thuê máy.
Ví dụ
THUEMAY.INP
3
50 300 200
30 230 100
270 350 150
THUEMAY.OUT
2 250
32
đáp án
Bài 1: XANG.PAS
{$A+,B-,D+,E+,F-,G-,I+,L+,N+,O-,P-,Q+,R+,S+,T-,V+,X+}
const
fi='XANG.INP';
fo='XANG.OUT';
var f: text; n,t,p: integer; vong: longint;
st,sp,min,ti,tongnc,nv,d1,d2,ld1: comp;
nc: array[1..10000]of integer;
d : array[1..10000]of longint;
procedure input;
var i:integer;
begin
assign(f,fi); reset(f);
readln(f,n);
for i:=1 to n do readln(f,nc[i],d[i]);
close(f);
end;
function qp(i:integer):integer;
begin
if i
end;
function qt(i:integer):integer;
begin
if i>1 then qt:=i-1 else qt:=n;
end;
procedure vitribandau;
begin
while d2-d1
begin
d2:=d2+d[t];
inc(t);
if t=n+1 then t:=1;
end;
p:=qt(t);
end;
procedure vitrisangphai;
begin
while d2-d1
begin
sp:=sp+nc[t];
st:=st-nc[t];
ti:=ti-(vong-d2+ld1)*nc[t];
ti:=ti+(d2-ld1)*nc[t];
d2:=d2+d[t];
inc(t);
if t=n+1 then t:=1;
end;
end;
procedure init;
var i:integer; dd:longint;
begin
for i:=1 to n do tongnc:=tongnc+nc[i];
for i:=1 to n do vong:=vong+d[i];
nv:=(vong div 2)+(vong mod 2);
t:=1; vitribandau;
i:=1; dd:=0;
while i<>t do
begin
sp:=sp+nc[i];
ti:=ti+dd*nc[i];
dd:=dd+d[i];
i:=qp(i);
end;
dd:=0; i:=1;
while i<>p do
begin
if i<>1 then st:=st+nc[i];
ti:=ti+dd*nc[i];
i:=qt(i);
dd:=dd+d[i];
end;
min:=ti;
end;
procedure proce;
var i,dd:integer; il:word;
begin
for i:=2 to n do
begin
ld1:=d1;
d1:=d1+d[i-1];
st:=st+nc[i-1];
sp:=sp-nc[i-1];
vitrisangphai;
ti:=ti+st*d[i-1]-sp*d[i-1];
if ti
begin
min:=ti;
il:=i;
end;
end;
end;
procedure outpu;
begin
assign(f,fo); rewrite(f);
writeln(f,min:0:0);
close(f);
end;
BEGIN
input; init; proce; outpu;
END.
Bµi 2: THUEMAY.PAS
{$R+,Q+}
Const
Fi='thuemay.inp';
Fo='thuemay.out';
Var B,t,m,vt:array[0..1000] Of Longint;
N:Longint; F:Text;
Procedure Init;
Var I:Longint;
Begin
Assign(f,fi);
Reset(f);
Readln(f,n);
For i:=1 to n do
Readln(f,b[i],t[i],m[i]);
Close(f);
For i:=1 to n do Vt[i]:=i;
End;
procedure Sort(l, r: Longint);
var i, j, x, y,xx: Longint;
begin
i := l; j := r; x := B[(l+r) DIV 2]; XX:=t[(l+r) DIV 2];
repeat
while (B[i] < x) Or ((b[i]=x) and (T[i]
while (x < B[j]) Or ((b[j]=x) and (T[j]>xx)) do j := j - 1;
if i <= j then
begin
y := b[i]; b[i] := b[j]; b[j] := y;
y := t[i]; t[i] := t[j]; t[j] := y;
y := m[i]; m[i] := m[j]; m[j] := y;
y := vt[i]; vt[i] := vt[j]; vt[j] := y;
i := i + 1; j := j - 1;
end;
until i > j;
if l < j then Sort(l, j);
if i < r then Sort(i, r);
end;
Procedure QHD;
Var I,j,Max,v,v1,dem:Longint;
A,tr:Array[0..1000] Of Longint;
Begin
For i:=1 to n do a[i]:=Longint(M[i]);
Fillchar(tr,sizeof(tr),0);
For i:=1 to n do
For j:=1 to i-1 do
If A[i]
If B[i]>=b[j]+t[j] then
Begin
Tr[i]:=j;
A[i]:=Longint(a[j])+Longint(m[i]);
End;
Max:=a[1];
V:=1;
For i:=1 to n do
If max
Begin
Max:=a[i];
V:=i;
End;
Assign(f,fo);
ReWrite(f);
V1:=v;
Dem:=0;
Repeat
Inc(dem);
V1:=tr[v1];
Until V1=0;
Writeln(F,dem,' ',max);
Repeat
Write(f,vt[v],' ');
V:=tr[v];
Until V=0;
Close(f);
End;
Begin
Init;
Sort(1,n);
QHD;
End.
Bài 2: SUAMAY.PAS
Một công ty chuyên sửa chữa máy tính nhận đợc n đơn đặt hàng
sửa máy (n<=100). Sau khi xem xét công ty đã thu đợc thông tin sau:
+Đơn đặt hàng thứ i cho biết:
Thời điểm bắt đầu sửa là a[i] Thời gian sửa chữa là b[i]. (a[i], b[i]
nguyên dơng <=10000)
+Thời gian di chuyển của n địa điểm sửa máy trên đợc biểu diễn bằng
ma trận C
C[i,i]=0 C[i,j]=C[j,i] là thời gian đi từ i đến j i<>j
0
(nguyên) <=10000
Công ty có rất nhiều nhân viên có trình độ tơng đơng nhau. Song
để giảm tối đa chi phí thì công ty phải điều số nhân viên đi sửa máy
là ít nhất. Biết rằng mỗi máy chỉ cần một nhân viên sửa, trong một thời
điểm thì một nhân viên chỉ sửa đợc một máy. Mỗi nhân viên có thể sửa
nhiều máy
SUAMAY.INP
d1: N
N dòng gồm hai số a[i] b[i]
Từ dòng n+1 biểu diễn ma trân C
SUAMAY.OUT
S số lợng nhân viên điều đi
S dòng tiếp theo là thứ tự các máy đợc sửa bởi nhân viên i. Kết thúc mỗi
dòng là số -1
SUAMAY.INP
4
100 10
85 13
40 3
76 91
0
2
2
0
1
3
2
1
3
0
2
7
4
7
4
SUAMAY.OUT
2
3 2 1 -1
4 -1
Đề thi thử quốc gia năm 2003-2004
vòng 2
Ngày thi thứ 2: 15/01/2004
Bài 1: VANTAI.PAS
0
Bạn là giám đốc của một công ty vận tải. Công ty có rất nhiều xe (Vô
hạn). Mỗi xe có trọng tải rất lớn (Vô cùng lớn). Có N thành phố (N<=200).
Các con đờng 2 chiều nối giữa hai thành phố đợc biểu diễn bằng ma trận
C[i,j].
C[i,i]=0;
C[i,j]=C[j,i];
C[i,j]=0 nếu không có đờng từ thành phố i đến thành phố j.
C[i,j]<>0 nếu có đờng từ thành phố i đến thành phố j và con đờng
này chịu đợc trọng tải là C[i,j] (C[i,j]<=200).
Bạn nhận đợc đơn đặt hàng vận chuyển hàng hoá từ thành phố X đến
thành phố Y (X<>Y)
Khối lợng phải chuyên chở là P (P<=10.000). Ban đầu hàng và xe đợc tập
trung tại thành phố X.
Yêu cầu: Tìm một đờng đi từ X->Y sao cho số xe mà bạn cần phải điều
động là ít nhất. Mỗi xe chỉ đợc điều động 1 lần.
VANTAI.INP
D1: K (Số test) K<=10
K nhóm tiếp theo
+Dòng đầu: n x y p.
+ n dòng tiếp là ma trận C.
VANTAI.OUT
Ghi K số. Số thứ i là số xe điều động ở test thứ i. Nếu không có cách
điều động thì ghi -1.
Cách chấm:
-Có 20 test, mỗi test 0.5 đ. Với mỗi test nếu file VANTAI.OUT của bạn đúng
K1 trong K bộ thì sẽ đợc 0.5*K1/K điểm.
-Yêu cầu thời gian:
Chơng trình chạy trong [0,2] giây thì đợc 100% số điểm.
Chơng trình chạy trong (2,4] giây thì đợc 50% số điểm.
Chơng trình chạy trong (4,8] giây thì đợc 25% số điểm.
Còn lại bạn sẽ không có điểm.
Ví dụ:
VANTAI.INP
VANTAI.OUT
1
1
3121
010
100
000
Bài 2: THUEMAY.PAS
Bạn là chủ của một máy tính. Bạn nhận đợc N (N<=16000) đơn
đặt hàng thuê máy. Mỗi đơn cho biết:
+A[i] là thời điểm bắt đầu thuê (A[i] nguyên dơng <=1.000.000).
+B[i] là thời gian thuê máy (B[i] nguyên dơng <=16.000).
+C[i] là số tiền bạn thu đợc (C[i] nguyên dơng <=1.000 $). Hãy chọn
ra các đơn đặt hàng sao cho số tiền thu đợc là lớn nhất. Biết rằng trong
1 đơn vị thời gian thì máy tính chỉ thực hiện đợc một đơn đặt hàng.
THUEMAY.INP
D1: Số n
n dòng: mỗi dòng ghi 3 số A[i] B[i] C[i].
THUEMAY.OUT
D1: Số S là số tiền thu đợc.
Cách chấm:
Có 20 Test, mỗi test đúng 0.5 điểm.
Nếu chơng trình chạy trong khoảng [0:2] giây thì đợc 100% số
điểm.
Nếu chạy trong (2:4] giây thì đợc 50% số điểm.
Nếu chạy trong (4:8] giây thì đợc 25% số điểm.
Nếu lớn hơn thời gian trên thì 0 điểm.
VD: THUEMAY.INP
THUEMAY.OUT
4
4
121
151
Sở GD-ĐT Quảng Bình
trờng THPT Chuyên QB
cộng hoà xã hội chủ nghĩa việt nam
độc lập-tự do-hạnh phúc
giấy xin mợn xe
Kính gửi:
Ban Giám hiệu trờng Cao Đẳng S Phạm Quảng Bình.
Để chuẩn cho kỳ thi học sinh giỏi Quốc gia, trờng THPT Chuyên
Quảng Bình có tổ chức cho một số em đội tuyển học sinh giỏi Quốc gia
đi học tại trờng THPT Chuyên Quảng Trị. Vì điều kiện cơ sở vật chất của
nhà trờng còn khó khăn, nên nhà trờng xin trờng Cao Đẳng S Phạm Quảng
Bình hỗ trợ một chuyến xe để đa các em đi học.
Thời gian: 15h ngày 20/02/2004.
Kính mong trờng Cao Đẳng S Phạm Quảng Bình tạo điều kiện giúp
đỡ.
Chúng tôi xin chân thành cảm ơn.
Đồng Hới, Ngày 19 tháng 02 năm 2004.
Hiệu trởng trờng THPT Chuyên QB