Tải bản đầy đủ (.doc) (6 trang)

Đề thi học sinh giỏi môn tin lớp 11

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (77.12 KB, 6 trang )

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/2006
Đề thi đề xuất
lớp 11
Bài 1: Đếm số xâu con:
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.
Yêu cầu: Hãy tìm số lợng xâu con của xâu X.
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 Trong đó: 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.
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 theo cấu
trúc:
Dòng 1: Ghi số S, là số lợng xâu con tìm đợc.
Giới hạn thời gian thực hiện chơng trình không quá 3 giây


Ví dụ:
XAUCON.INP

30 14 4
BBABBBAAAAAABBAABBBABBABABABAB
XAUCON.OUT
41
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ê.
Yêu cầu: 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
điều kiện 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
(0máy.
-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.
Dữ liệu ra: Ghi và file văn bản THUEMAY.OUT theo cấu trúc nh
sau:
-Dòng 1: Ghi 2 số P Q cách nhau một dấu cách. 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: 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: 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 maxBegin
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.



×