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... assignf,fo;
Trang 1Sở 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
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ụ
Trang 2thể 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<Mi<32767
(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 (0<N<=1000) là số phiếu đăng ký thuê má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
3 2
Trang 3§¸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;
ProcedureInit;
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
Trang 4Read(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;
Trang 5assign(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]<xx)) do i := i + 1; 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;
Trang 6until 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]<Longint(a[j])+Longint(m[i]) then
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<a[i] then
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