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

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

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 (100.55 KB, 9 trang )

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
Tên bài

Bài
1
Bài
2

Tên chơng
trình
Tìm vị trí đặt CAYXANG.PA
cây xăng
S
Vận tải hàng hóa
VANTAI.PAS

File DLV

File DLR

CAYXANG.IN
P
VANTAI.INP



CAYXANG.OU
T
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à D i,
khoảng cách từ cây xăng thứ n đến cây xăng thứ 1 là D n. 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.


N dòng tiếp theo: Mỗi dòng chứa hai số nguyên L i Di, trong đó: Li là
nhu cầu tiêu thụ xăng mỗi ngày tại cây xăng thứ i và D i 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; 0Dữ 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ụ:
XANG.INP XANG.OUT
783
10
1
11
32
13
14
1000 100
12
23
2 888
11
1 100
Bài 2: Vận tải hàng hóa
(10 điểm)
VANTAI.PAS
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
1
3121
010
100

000

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

Đá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
Tên bài

Bài
1
Bài
2

Tên chơng
trình
Tìm vị trí đặt CAYXANG.PA
cây xăng
S
Vận tải hàng hóa
VANTAI.PAS

File DLV

File DLR


CAYXANG.IN
P
VANTAI.INP

CAYXANG.OU
T
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';
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 ielse 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-d1begin
d2:=d2+d[t];
inc(t);
if t=n+1 then t:=1;
end;
p:=trai(t);
end;
procedure vitrisangphai;
begin
while d2-d1begin
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;
end;
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 tienend;
end;
procedure inkq;
begin
assign(f,fo); rewrite(f);
writeln(f,gia*min:0:0);
close(f);
end;
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 maxend;
readln(f);
end;
Kq:=0;
XuLy;
end;
end;
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)
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
00<Σ(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
00<Σ(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


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.




×