Së Gi¸o dôc-§µo t¹o
Qu¶ng b×nh
SBD :
§Ò chÝnh thøc
kú thi CHäN häc sinh giái líp 12
n¨m häc 2009 - 2010
m«n: tin häc - vßng i
Thời gian 180 phút, không kể thời gian giao đề
ĐỀ RA
Sử dụng ngôn ngữ lập trình Turbo Pascal để lập trình giải các bài toán sau:
Câu 1: (3,0 điểm) Tìm số
TIMSO.PAS
Gọi abc là số có ba chữ số, hãy liệt kê tất cả các số abc sao cho tổng lập
phương các chữ số của abc bằng chính nó.
abc = a 3 + b3 + c3
Ví dụ: Ta có số: 153 = 13 + 53 + 33
Dữ liệu ra: Ghi ra file văn bản TIMSO.OUT, theo cấu trúc như sau:
- Trên mỗi dòng ghi một số abc tìm được.
Câu 2: (3,5 điểm) Tính diện tích đa giác
DAGIAC.PAS
Trong mặt phẳng tọa độ, cho đa giác lồi có N đỉnh, các đỉnh được đánh số
theo thứ tự từ 1 đến N, đỉnh thứ i có tọa độ tương ứng là (xi, yi).
Yêu cầu: Hãy tính diện tích của đa giác lồi trên.
Dữ liệu vào: Cho trong file văn bản DAGIAC.INP, có cấu trúc như sau:
- Dòng 1: Ghi số nguyên dương N, là số lượng đỉnh của đa giác lồi, (3 ≤ N ≤ 100).
- N dòng tiếp theo: Mỗi dòng ghi hai số nguyên xi yi là tọa độ đỉnh thứ i của đa
giác lồi, hai số được ghi cách nhau ít nhất một dấu cách, (-32767 ≤ xi , yi ≤ 32767).
Dữ liệu ra: Ghi ra file văn bản DAGIAC.OUT, theo cấu trúc như sau:
- Dòng 1: Ghi số thực S, là diện tích của đa giác. S được làm tròn đến 1 chữ số
phần thập phân.
Ví dụ:
DAGIAC.INP
DAGIAC.OUT
3
0.5
0 0
0 1
1 0
Câu 3: (3,5 điểm) Lắp đặt hệ thống ống dẫn xăng
LAPDAT.PAS
Một công ty kinh doanh xăng có N cửa hàng, các cửa hàng được đánh số
theo thứ tự từ 1 đến N. Nhằm thuận tiện trong việc vận chuyển xăng giữa các cửa
hàng, lãnh đạo công ty lập kế hoạch lắp đặt các đường ống dẫn nối các cửa hàng
với nhau. Qua khảo sát, các chuyên gia cho biết độ dài đường ống giữa hai cửa
hàng i và j là Aij. Để giảm chi phí, công ty chỉ lắp đặt các đường ống sao cho giữa
hai cửa hàng bất kỳ đều có thể chuyển xăng qua lại cho nhau (trực tiếp hoặc gián
1
tiếp qua các cửa hàng trung gian) mà tổng độ dài các ống dẫn cần dùng là ngắn
nhất.
Yêu cầu: Hãy tìm một phương án lắp đặt các đường ống thỏa mãn yêu cầu của
lãnh đạo công ty.
Dữ liệu vào: Cho trong file văn bản LAPDAT.INP, có cấu trúc như sau:
- Dòng 1: Ghi số nguyên dương N, là số lượng cửa hàng, (2 ≤ N ≤ 100).
- N dòng tiếp theo: Mỗi dòng ghi N số nguyên dương A ij là độ dài đường ống cần
dùng để nối giữa cửa hàng i và cửa hàng j. Trên mỗi dòng các số được ghi cách
nhau ít nhất một dấu cách, (Aij = 0, với i = j; 1 ≤ Aij ≤ 32767, với i ≠ j).
Dữ liệu ra: Ghi ra tệp văn bản LAPDAT.OUT, theo cấu trúc như sau:
- Dòng 1: Ghi số nguyên dương L, là tổng độ dài đường ống cần dùng theo phương
án tìm được (0 < L < 2×109).
- Các dòng tiếp theo: Mỗi dòng ghi hai số nguyên dương i j thể hiện có đường
ống nối giữa cửa hàng i và cửa hàng j. Hai số ghi cách nhau ít nhất một dấu cách.
Ví dụ:
LAPDAT.INP
4
0
2
3
12
2
0
4
5
3
4
0
9
12
5
9
0
LAPDAT.OUT
10
1 2
1 3
2 4
==HẾT==
2
HƯỚNG DẪN CHẤM THI CHỌN HỌC SINH GIỎI LỚP 12
NĂM HỌC 2009 - 2010
MÔN TIN HỌC - VÒNG I
I- Phương pháp:
- Giám khảo tạo bộ dữ liệu vào, tính toán kết quả. Thực hiện chương trình của
học sinh và so sánh kết quả.
- Giám khảo có thể sử dụng chương trình gợi ý dưới đây để tính toán kết quả
của dữ liệu vào.
- Chương trình học sinh đúng một bộ test, giám khảo cho 0,5 điểm. Như vậy,
nếu một câu có 3 điểm thì giám khảo phải tạo 6 bộ test.
- Với mỗi câu, giám khảo phải tạo được một bộ test có không gian dữ liệu lớn.
- Đối với Câu 1, kết quả có 4 số thỏa mãn điều kiện đề bài, học sinh trả lời
đúng 1 số giám khảo cho 0,75 điểm.
- Đối với Câu 2 nếu học sinh không làm tròn đến 1 chữ số thập phân thì trừ 0,1
điểm trên mỗi test.
- Đối với Câu 3 có thể có nhiều phương án lắp đặt. Nếu học sinh đưa ra
phương án khác với đáp án nhưng vẫn đúng thì giám khảo cho điểm tối đa.
II- Chương trình gợi ý:
Câu 1: (3,0 điểm) Tìm số
Program Tim_so;
Const
fo='Timso.out';
Var a,b,c:Longint;
f:Text;
Begin
Assign(f,fo);
Rewrite(f);
For a:=1 to 9 do
For b:=0 to 9 do
For c:=0 to 9 do
If (a*a*a + b*b*b + c*c*c) = (100*a + 10*b + c) then
Writeln(f,100*a + 10*b + c);
Close(f);
End.
Câu 2: (3,5 điểm) Tính diện tích đa giác
Program Dien_tich_Da_giac;
Const
fi='Dagiac.in5';
fo='Dagiac.out';
Type
Diem = Record
x,y:Longint;
End;
mmc=Array[0..1001] of Diem;
Var
N:Longint;
A:mmc;
Procedure Read_Data;
Var i: Longint;
f:Text;
Begin
Assign(f,fi);
Reset(f);
Readln(f,N);
For i:=1 to N do
Readln(f,A[i].x,A[i].y);
Close(f);
End;
Procedure Tinh;
Var i: Longint;
Begin
S:=0;
S:Real;
3
A[N+1] := A[1];
For i:= 1 to N do
S:= S + (1/2)*(A[i+1].y + A[i].y)*(A[i+1].x-A[i].x);
End;
Procedure Write_Data;
Var f:Text;
Begin
Assign(f,fo);
ReWrite(f);
Write(f,abs(S):15:1);
Close(f);
End;
BEGIN
Read_Data; Tinh; Write_Data;
END.
Câu 3: (3,5 điểm) Lắp đặt hệ thống ống dẫn xăng
Program Lap_Dat;
Const fi='Lapdat.in0';
fo='Lapdat.ou0';
Type mhc=array[0..101,0..101] of Word;
Canh = Record
u:Byte;
v:Byte;
info:word;
End;
mmc=Array[1..10001] of Canh;
Var T,K:Longint; N:Byte; E:mmc; B:mhc;
Procedure Read_Data;
Var f:text;
i,j,l:Byte;
Begin
Assign(f,fi);
Reset(f);
Readln(f,N);
Fillchar(B,sizeof(B),0);
K:=0;
For i:=1 to N do
Begin
For j:=1 to i-1 do
Begin
inc(K);
Read(f,E[K].info);
E[K].u:=i;
E[K].v:=j;
End;
Readln(f);
End;
Close(f);
End;
Procedure Hoan_doi(Var x,y:Canh);
Var tg:Canh;
Begin
tg:=x;
x:=y;
y:=tg;
End;
Procedure Sap_Xep;
Var i,j:Longint;
Begin
For i:=1 to K-1 do
For j:=i+1 to K do
If E[i].info > E[j].info then
Hoan_doi(E[i],E[j]);
End;
Function Lien_Thong(u,v:Byte):Boolean;
var S:array[1..1000]of Word;
4
KT:array[1..100] of Boolean;
Top,i:Byte;
begin
Top:=0;
Fillchar(KT,sizeof(KT),false);
Lien_Thong:=True;
inc(Top);
S[Top]:=u;
KT[u]:=True;
While Top > 0 do
Begin
u:=S[Top];
dec(Top);
If u=v then
Begin
Lien_Thong:=False;
Exit;
End;
For i:=1 to N do
If (KT[i]=False) and (B[u,i] > 0) then
Begin
inc(Top);
S[Top]:=i;
KT[i]:=True;
End;
End;
End;
Procedure Kruskal;
Var i,j:Word;
Begin
i:=0;
j:=0;
T:=0;
While i < N-1 do
Begin
inc(j);
If Lien_Thong(E[j].u,E[j].v) then
Begin
B[E[j].u,E[j].v]:=E[j].info;
B[E[j].v,E[j].u]:=E[j].info;
T:=T+E[j].info;
inc(i);
end;
End;
End;
Procedure Write_Data;
Var f:text;
i,j:Byte;
Begin
Assign(f,fo);
Rewrite(f);
Writeln(f,t);
For i:=1 to N do
For j:=1 to N do
If B[i,j]>0 then
Begin
Writeln(f,i,' ',j);
B[j,i]:=0;
End;
Close(f);
End;
BEGIN
Read_Data; Sap_Xep; Kruskal; Write_Data;
END.
5
... ==HẾT== HƯỚNG DẪN CHẤM THI CHỌN HỌC SINH GIỎI LỚP 12 NĂM HỌC 2009 - 2010 MÔN TIN HỌC - VÒNG I I- Phương pháp: - Giám khảo tạo liệu vào, tính toán kết Thực chương trình học sinh so sánh kết - Giám khảo... điều kiện đề bài, học sinh trả lời số giám khảo cho 0,75 điểm - Đối với Câu học sinh không làm tròn đến chữ số thập phân trừ 0,1 điểm test - Đối với Câu có nhiều phương án lắp đặt Nếu học sinh đưa... chương trình học sinh so sánh kết - Giám khảo sử dụng chương trình gợi ý để tính toán kết liệu vào - Chương trình học sinh test, giám khảo cho 0,5 điểm Như vậy, câu có điểm giám khảo phải tạo test