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

Đề thi học sinh giỏi quốc gia môn tin lớp 12

8 293 1

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 8
Dung lượng 46,5 KB

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

Nội dung

Trờng THPT Chuyên Quảng Bình Kỳ thi chọn học sinh giỏi quốc gia Lớp 12 THPT năm học 2006-2007 Đề thi đề nghị môn Tin học-Bảng B Thời gian: 180 phút Không kể thời gian giao đề Tổng quan b

Trang 1

Trờng THPT Chuyên Quảng Bình Kỳ thi chọn học sinh giỏi quốc gia

Lớp 12 THPT năm học 2006-2007

Đề thi đề nghị

môn Tin học-Bảng B

Thời gian: 180 phút (Không kể thời gian giao đề)

Tổng quan bài thi

Bài 1 Tìm vị trí đặt cây xăng CAYXANG.PAS CAYXANG.INP CAYXANG.OUT Bài 2 Vận tải hàng hóa VANTAI.PAS VANTAI.INP VANTAI.OUT

Bài 1: Tìm vị trí đặt cây xăng (10 điểm) CAYXANG.PAS

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 tiêu thụ 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à C đồng

Yêu cầu: 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 CAYXANG.INP có cấu trúc nh sau:

Dòng 1: Chứa số nguyên dơng N là số lợng vị trí sẽ đặt cây xăng (6<=N<=10.000)

Dòng 2: Chứa số dơng C, là chi phí chuyên chở một lít xăng trên 1 km.

xăng mỗi ngày tại cây xăng thứ i và Di là khoảng cách từ cây xăng thứ i đến cây xăng thứ i+1 Các số ghi cách nhau ít nhất một dấu cách

(0<=Li<=1000; 0<Di<=50.000; 0 < (Di) <= 1.000.000)

Dữ liệu ra: Ghi ra file văn bản CAYXANG.OUT theo cấu trúc nh sau:

Dòng 1: Ghi số S là tổng chi phí nhỏ nhất tìm đợc để 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ụ:

10 1

1 1

3 2

1 3

1 4

1000 100

1 2

2 3

2 888

1 1

783

Trang 2

1 100

Một công ty vận tải có rất nhiều xe (Vô hạn) Các xe đều có trọng tải rất lớn (Vô cùng lớn) Có N thành phố, giữa các thành phố có các con đờng 2 chiều nối với nhau đợc biểu biễn bởi ma trận C[i,j].

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

Ban Giám đốc công ty vận tải nhận đợc đơn đặt hàng vận chuyển hàng hoá từ thành phố X đến thành phố Y Khối lợng phải chuyên chở là P Giải sử 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à công ty cần phải điều động là ít

nhất Mỗi xe chỉ đợc điều động 1 lần.

Dữ liệu vào: Cho trong file VANTAI.INP, có cấu trúc nh sau:

Dòng 1: Chứa số K là số test (1<=K<=10)

K nhóm dòng tiếp theo

+Dòng đầu: Chứa các số N X Y P (2<=N<=200; 1<=P<=10.000; X<>Y) +N dòng tiếp theo: Mỗi dòng ghi N số C[i,j] (0<=C[i,j]<=200).

Dữ liệu ra: Ghi ra file VANTAI.OUT, theo cấu trúc nh sau:

K dòng: Mỗi dòng ghi một số nguyên M, là số xe điều động tơng ứng với test Nếu

không có cách điều động thì ghi -1.

Ví dụ:

VANTAI.INP VANTAI.OUT 1

3 1 2 1

0 1 0

1 0 0

0 0 0

1

Lớp 12 THPT năm học 2006-2007

ĐáP áN cho Đề thi đề nghị

môn Tin học-Bảng B

Thời gian: 180 phút (Không kể thời gian giao đề)

Tổng quan bài thi

Bài 1 Tìm vị trí đặt cây xăng CAYXANG.PAS CAYXANG.INP CAYXANG.OUT Bài 2 Vận tải hàng hóa VANTAI.PAS VANTAI.INP VANTAI.OUT

I-Chơng trình đề nghị

Bài 1:

{$A+,B-,D+,E+,F-,G-,I+,L+,N+,O-,P-,Q+,R+,S+,T-,V+,X+}

const

fi='cayxang.inp';

Trang 3

fo='cayxang.out';

var f: text;

n,t,p: integer;

vong: longint;

slt,slp,min,gia,tien,tongnc,nuavong,d1,d2,ld1: comp; nc: array[1 10000]of integer;

d : array[1 10000]of longint;

procedure nhap;

var i:integer;

begin

assign(f,fi);

reset(f);

readln(f,n);

readln(f,gia);

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

close(f);

end;

function phai(i:integer):integer;

begin

if i<n then phai:=i+1

else phai:=1;

end;

function trai(i:integer):integer;

begin

if i>1 then trai:=i-1

else trai:=n;

end;

procedure vitritraiphaidau;

begin

while d2-d1<nuavong do

begin

d2:=d2+d[t];

inc(t);

if t=n+1 then t:=1;

end;

p:=trai(t);

end;

procedure vitrisangphai;

begin

while d2-d1<nuavong do

begin

slp:=slp+nc[t];

slt:=slt-nc[t];

tien:=tien-(vong-d2+ld1)*nc[t];

tien:=tien+(d2-ld1)*nc[t];

d2:=d2+d[t];

inc(t);

if t=n+1 then t:=1;

end;

Trang 4

procedure chuanbi;

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]; nuavong:=vong div 2+vong mod 2; t:=1;

vitritraiphaidau;

i:=1;

dd:=0;

while i<>t do

begin

slp:=slp+nc[i];

tien:=tien+dd*nc[i];

dd:=dd+d[i];

i:=phai(i);

end;

dd:=0;

i:=1;

while i<>p do

begin

if i<>1 then slt:=slt+nc[i];

tien:=tien+dd*nc[i];

i:=trai(i);

dd:=dd+d[i];

end;

min:=tien;

end;

procedure xuly;

var i,dd:integer;

begin

for i:=2 to n do

begin

ld1:=d1;

d1:=d1+d[i-1];

slt:=slt+nc[i-1];

slp:=slp-nc[i-1];

vitrisangphai;

tien:=tien+slt*d[i-1]-slp*d[i-1];

if tien<min then min:=tien;

end;

end;

procedure inkq;

begin

assign(f,fo); rewrite(f);

writeln(f,gia*min:0:0);

close(f);

Trang 5

BEGIN

nhap;

chuanbi;

xuly;

inkq;

END

Bµi 2:

{OK19:26pm 11/26/2006 }

Program Van_tai;

Const

fi='Vantai.in2';

fo='vantai.ou2';

Type

ii=integer; li=longint; bb=byte; bo=boolean; mt=array[0 201,0 201] of bb;

mmc=array[0 1001] of bb;

mmc1=array[0 201] of bo;

Var

c:mt; q:mmc; b:mmc1;

n,source,target,p,Kq,max,kk:ii;

time:li;

f,g:text;

Procedure XuLy; Forward;

Procedure DocF;

var

i,j,k:ii;

begin

assign(f,fi);

reset(f);

readln(f,kk);

for k:=1 to kk do

begin

readln(f,n,source,target,p);

max:=0;

for i:=1 to n do

begin

for j:=1 to n do

begin

read(f,c[i,j]);

if max<c[i,j] then max:=c[i,j];

end;

readln(f);

end;

Kq:=0;

XuLy;

end;

end;

Trang 6

Function ThongQua(x:ii):bo;

var dau,cuoi,i,j,y:ii;

begin

fillchar(b,sizeof(b),true);

ThongQua:=false;

dau:=1;

cuoi:=1;

Q[1]:=source;

b[source]:=false;

while dau<=cuoi do

begin

y:=Q[dau];

for i:=1 to n do

if b[i] and (C[q[dau],i]>=x) then begin

if i=target then

begin

ThongQua:=true;

Exit;

end;

inc(cuoi);

Q[cuoi]:=i;

b[i]:=false;

end;

inc(dau);

end;

end;

Procedure NhiPhan(l,r:ii);

var

mid:ii;

begin

if l<=r then

begin

mid:=(l+r) div 2;

if ThongQua(mid) then

begin

Kq:=mid;

NhiPhan(mid+1,r);

end

else Nhiphan(l,mid-1);

end;

end;

Procedure XuLy;

var

i,j:ii;

begin

Nhiphan(1,max);

if kq<>0 then writeln(g,(p-1) div kq+1)

Trang 7

else writeln(g,-1)

end;

Procedure GhiF;

begin

assign(g,fo);

rewrite(g);

end;

Procedure CloseF;

begin

close(g);

close(f);

end;

Begin

time:=meml[$0:$046c];

GhiF;

DocF;

CloseF;

writeln((meml[$0:$046c]-time)/18.21:0:9);readln;

End

II-Phơng án tạo test

Bài 1:

Sinh 10 Test, trong đó 5 test có giới hạn khung dữ liệu thấp

6<=N<=1.000 0<=Li<=100 0<=Li<=1000 0<Li<=100 0<(Di) <= 1.000.000

và 5 test còn lại có giới hạn khung dữ liệu nh yêu cấu bài toán đặt ra Bài 2:

Sinh 10 Test, trong đó 5 test có giới hạn khung dữ liệu thấp

2<=N<=100 1<=P<=1000 0<=Li<=1000 0<Li<=100 0<(Di) <= 1.000.000

và 5 test còn lại có giới hạn khung dữ liệu nh yêu cấu bài toán đặt ra

Trang 8

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.

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

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w