KỲ THI HỌC SINH GIỎI
THCS
NĂM HỌC 2003 – 2004
MÔN: TIN HỌC
-
Đề thi.
-
Bộ test
ĐỀ
HỌC SINH GIỎI MÔN TIN HỌC THCS – NĂM HỌC 2003-2004
KỲ THI
NGÀY
BÀI 1
: BÀI TOÁN DIỆN TÍCH TAM GIÁC
Cho một
h́nh chữ nhật ABCD, cạnh AB=a, cạnh BC=b. a,b là các số nguyên dương trong khoảng
[1, 100]
Một
điểm M chạy trong đoạn BC với BM=x . x
là số nguyên duơng trong khoảng [0, b], một điểm
N chạy trong đoạn CD với CN=x
Tính giá trị lớn nhất và giá trị nhỏ
nhất của diện tích tam giác AMN khi M, N lưu động.

Dữ liệu vào: Được cho trong tập
tin CHUNHAT.inp, gồm một
ḍng ghi hai số nguyên dương lần lượt là a, b.
Hai số cách nhau một khoảng trắng
Dữ liệu ra : Yêu cầu xuất ra tập
tin CHUNHAT.out, gồm bốn
ḍng:
+ Ḍng
đầu là giá trị lớn nhất của diện tích
tam giác AMN (một chữ số thập phân)
+ Ḍng thứ
hai là một giá trị của x để diện tích tam
giác AMN đạt giá trị lớn nhất
+ Ḍng thứ
ba là giá trị nhỏ nhất của diện tích tam giác AMN (một chữ
số thập phân)
+ Ḍng thứ
tư là một giá trị của x để diện tích
tam giác AMN đạt giá trị nhỏ nhất
Ví dụ:
CHUNHAT.inp
10 6
CHUNHAT.out
30.0
0
17.5
5
Yêu cầu kỹ thuật :
+ Có kiểm tra dữ
liệu nhập
+ Bài làm của thí
sinh lưu trên tập tin Bailam1.pas
BÀI
2: BÀI TOÁN Ô VUÔNG
Cho một bảng chữ nhật gồm m x
n điểm ( m hàng ngang, n hàng đứng)
nằm trên các mắt lưới ô vuông. Các
điểm liền kề trên cùng một hàng hoặc một
cột có thể có nối với nhau bởi một đoạn
thẳng có kích thước bằng 1.
Trên mỗi hàng có nhiều
nhất n-1 đoạn thẳng nằm ngang nối các
điểm liền nhau, trên mỗi cột có nhiều nhất
là m-1 đoạn thẳng thẳng đứng nối các
điểm liền nhau. Các đoạn liền kề
nhau có thể sẽ tạo ra các ô vuông trên bảng (chỉ
quan tâm các ô vuông có độ dài cạnh bằng 1).
Xem h́nh dưới:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Với bảng trên ta có 4
hàng ngang (mỗi hàng 5 điểm) và 5 hàng đứng (mỗi
hàng 4 điểm). Các đoạn thẳng nối chúng tạo
nên 3 ô vuông.
Để mô tả bảng người ta
dùng hai mảng nhị phân: một mảng diễn tả
các đoạn thẳng nằm ngang, một mảng diễn
tả các đoạn thẳng thẳng đứng.
Trong các mảng, số 1 diễn
tả có đoạn thẳng nối hai điểm liên tiếp,
số 0 diễn tả không có đoạn thẳng nối
hai điểm.
Trong h́nh vẽ trên, (bảng có 4x5 điểm) th́ ta có hai mảng
sau:
Ngang Dọc
1 0 1 0 1 0 0 0 1 1 1 1 0 1 0 0 1 1 1 0 0 1 1 0 0 0 0 1 1 0 0
Nhiệm vụ :
Lập tŕnh đếm số
các ô vuông có cạnh dộ dài bằng 1 tạo bởi các
đoạn nối có trên bảng đă cho.
Dữ liệu vào: gồm ba tập tin
Kthuoc.inp: gồm 2 số nguyên
dương (nhỏ hơn 100) lần lượt là m, n. Hai
số cách nhau một khoảng trắng
Ngang.inp và Doc.inp ( như mô tả ở phần
trên). Hai số liền nhau cách nhau một khoảng
trắng.
Dữ liệu ra : Xuất ra màn h́nh số ô
vuông có trên bảng đă cho.
Ví dụ :
Kthuoc.inp:
4 5
Ngang.inp và Doc.inp chứa nội dung như hai bảng trên.
Xuất
ra màn h́nh : 3
Lưu ư: Chỉ tính các ô vuông có độ dài cạnh bằng 1
Yêu cầu kỹ thuật :
+ Không cần
kiểm tra dữ liệu nhập
+ Bài làm của thí
sinh lưu trên tập tin Bailam2.pas
Bài 1.
|
|
CHUNHAT.INP |
CHUNHAT.OUT |
|
|
Test 1 |
10 |
20 |
Sai dữ
liệu |
|
Test 2 |
40 |
40 |
800.0 |
|
|
|
|
0 (hay
40) |
|
|
|
|
600.0 |
|
|
|
|
20 |
|
Test 3 |
10 |
6 |
30.0 |
|
|
|
|
0 |
|
|
|
|
17.5 |
|
|
|
|
5 |
|
Test 4 |
20 |
10 |
100.0 |
|
|
|
|
0 |
|
|
|
|
50.0 |
|
|
|
|
10 |
|
Test 5 |
20 |
6 |
60.0 |
|
|
|
|
0 |
|
|
|
|
18.0 |
|
|
|
|
6 |
Bài 2.
|
DOC.INP |
KTHUOC.INP |
NGANG.INP |
XUAT |
|
Test 1 |
|
|
|
|
1 1 1 1 1
1 1 1 1 0 0 0
1 1 1 1 0 0 1
1 1 1 1 1 1 1
1 1 |
5 7 |
1 1 1 1 1
1 1 1 0 0 1
1 1 1 0 0 1
1 1 1 0 0 1
1 1 1 1 1 1
1 |
13 |
|
Test 2 |
|
|
|
|
1 1 1 0 0 1 1 0 0 0 0 1 1 0 0 |
4 5 |
1 0 1 0 1 0 0 0 1 1 1 1 0 1 0 0 |
3 |
|
Test 3 |
|
|
|
|
0 0 1 0 0
0 0 0 1 0 0
0 0 0 1 0 0
0 0 0 1 0 0
0 0 0 1 0 0
0 |
6 6 |
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
0 |
|
Test 4 |
|
|
|
|
1 0 1 1 0 1 0 1 0 1 0 1 1 0 1 1 1 0 1 1 |
5 5 |
1 1 0 1 0 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 |
1 |
BÀI 1.
program
bailam1;
uses crt;
const
finp='chunhat.inp';
fout='chunhat.out';
var
i,j,a,b,s,luu,luu1:longint;
max,min,dt:real;
f,g:text;
procedure
nhap;
begin
{$i-}
assign(f,finp);
reset(f);
close(f);
if
(IOresult<>0) then
begin
write('File bi
hu hoac khong ton tai');
readln;
halt;
end;
assign(f,finp);
reset(f);
readln(f,a,b);
if
(IOresult<>0) or (a<1) or (b<1) or (a<b) or (a>100) or
(b>100) then
begin
write('Nhap
sai');
readln; halt;
end;
{$i+}
close(f);
end;
begin
clrscr;
nhap;
s:=a*b;
max:=s/2; min:=max;
for i:=0 to b do
begin
dt:=s-(a*i)/2-((b-i)*i)/2-((a-i)*b)/2;
if dt<min
then
begin
luu:=i;
min:=dt;
end;
if dt>max
then
begin
max:=dt;
luu1:=i;
end;
end;
assign(g,fout);
rewrite(g);
writeln(g,max:0:1);
writeln(g,luu1);
writeln(g,min:0:1);
writeln(g,luu);
close(g);
writeln(max:0:1);
writeln(luu1);
writeln(min:0:1);
writeln(luu);
writeln(' Ngoai ra ket qua con duoc xuat
vao file CHUNHAT.out');
delay(300);
end.
BÀI 2.
program
bailam2;
uses crt;
const
fin1='kthuoc.inp';
fin2='ngang.inp';
fin3='doc.inp';
var
f1,f2,f3:text;
a,nga,doc:array[1..100,1..100]
of integer;
i,m,n,d,j:integer;
procedure
nhap;
var
i,j:integer;
begin
assign(f1,fin1);
reset(f1);
read(f1,m,n); close(f1);
assign(f2,fin2);
reset(f2);
for i:=1 to m do
begin
for j:=1 to n-1
do
read(f2,nga[i,j]);
readln(f2);
end;
close(f2);
assign(f3,fin3);
reset(f3);
for i:=1 to m-1 do
begin
for j:=1 to n do
read(f3,doc[i,j]);
readln(f3);
end;
end;
begin
clrscr;
nhap; d:=0;
for i:=1 to m do
for j:=1 to n do
if
nga[i,j]+nga[i+1,j]+doc[i,j]+doc[i,j+1]=4 then inc(d);
write(d);
readln;
end.