1. Trang chủ
  2. » Trung học cơ sở - phổ thông

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

17 196 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 52 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Để 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

Trang 1

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

Trang 2

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<=5000)

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

HOP.OUT

4

Trang 3

§¸P ¸N

Bµi 1: Xaucon

{$R+,Q+}

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

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);

Trang 4

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}

Trang 5

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]<t[j] then 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;

Trang 6

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<sl[i] then Begin

Max:=sl[i]; V:=i;

Trang 7

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]); V:=tr[v];

End;

Close(f);

End;

Begin Init; Qhd; End

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<=10000, N nguyên)

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<Di, 0 < Sum(Di) <= 1000000)

Li là khả năng tiêu thụ xăng mỗi ngày (Li<32768)

Trang 8

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

1 1

3 2

1 3

1 4

1000 100

1 2

2 3

2 888

1 1

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

+ 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ê

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<=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 trống

Trang 9

-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

3 2

đá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);

Trang 10

for i:=1 to n do readln(f,nc[i],d[i]);

close(f);

end;

function qp(i:integer):integer;

begin

if i<n then qp:=i+1 else qp:=1;

end;

function qt(i:integer):integer;

begin

if i>1 then qt:=i-1 else qt:=n;

end;

procedure vitribandau;

begin

while d2-d1<nv do

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<nv do

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);

Trang 11

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<min then

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);

Trang 12

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;

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]<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;

Trang 13

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:

Trang 14

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<C[i,j] (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 1 2

2 0 3 7

1 3 0 4

2 7 4 0

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

Trang 15

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

3 1 2 1

0 1 0

1 0 0

0 0 0

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)

Ngày đăng: 17/08/2017, 14:18

TỪ KHÓA LIÊN QUAN

w