1
Sở Gd&Đt kỳ thi CHọN học sinh giỏi cấp tỉnh lớp 12 thpt
Quảng bình năm học 2012 - 2013
Môn thi: tin học - Vòng II
Đề thi chính thức (Khóa thi ngày 11 tháng 10 năm 2012)
Số Báo Danh: Thời gian làm bài: 180 phút (không kể thời gian giao đề)
RA
S dng ngụn ng lp trỡnh Turbo Pascal lp trỡnh gii cỏc bi toỏn sau:
Cõu 1: (3,0 im) Tớnh din tớch tam giỏc. DT.PAS.
Trong h trc ta Decac, cho ba im khụng thng hng A, B, C cú ta
: A(x
1
, y
1
); B(x
2
, y
2
); C(x
3
, y
3
).
Yờu cu: Tớnh din tớch tam giỏc ABC.
D liu vo: Cho trong file vn bn DT.INP, cú cu trỳc 3 dũng, mi dũng cha
hai s nguyờn x
i
y
i
, l ta ca mt nh ca tam giỏc ABC. Cỏc s c ghi
cỏch nhau ớt nht mt du cỏch. (-2000 x
i
, y
i
2000)
D liu ra: Ghi ra file vn bn DT.OUT, theo cu trỳc:
- Dũng 1: Ghi din tớch tam giỏc tỡm c. Lm trũn kt qu n mt ch s sau
du ngn cỏch thp phõn.
Vớ d:
DT.INP DT.OUT
0 0
1 0
0 1
0.5
Cõu 2: (3,5 im) t vộ vo sõn NouCamp NOUCAMP.PAS
NouCamp l mt sõn búng ln. Sõn cú N gh ngi, cỏc gh c ỏnh s
th t t 1 n N.
Ti nay, sõn NouCamp s din ra trn u gia hai i búng ln ca th
gii: Barcelona v Real Madrid. Hin nay, mt s gh trờn sõn ó c khỏn gi
t mua lm ch ngi.
Yờu cu: Hóy kim tra xem trờn sõn cũn nhng gh no cha c mua vộ t
ch.
D liu vo: Cho trong file vn bn NOUCAMP.INP, cú cu trỳc nh sau:
- Dũng 1: Ghi hai s nguyờn dng N M. Trong ú: N l s lng gh cú trong
sõn. M l s lng gh ó c khỏn gi mua vộ t ch. Hai s c ghi cỏch
nhau ớt nht mt du cỏch. (N chia ht cho 8; 1 N 400000; 1 M N).
- Dũng 2: Ghi M s nguyờn dng a
1
, a
2, ,
a
m
, l ch s ca M gh ó c khỏn
gi mua vộ t ch. Cỏc s c ghi cỏch nhau ớt nht mt du cỏch.
D liu ra: Ghi ra file vn bn NOUCAMP.OUT, theo cu trỳc nh sau:
- Dũng 1: Ghi K s nguyờn dng b
1
, b
2
, , b
k
, l ch s ca cỏc gh trờn sõn cha
c mua vộ t ch (K = N-M). Cỏc s c ghi theo th t tng dn v cỏch
nhau ớt nht mt du cỏch.
2
Ví dụ:
NOUCAMP.INP NOUCAMP.OUT
16 10
2 3 6 7 8 9 10 12 15 16
1 4 5 11 13 14
Câu 3: (3,5 điểm) Xếp hộp lồng nhau XEPHOP.PAS
Bé Ri tuy còn nhỏ nhưng là một cô bé rất xinh xắn và chăm chỉ. Mẹ bé Ri là
chủ một cửa hàng. Hàng ngày, cửa hàng của mẹ loại ra rất nhiều hộp giấy hình hộp
chữ nhật. Bé Ri thường giúp mẹ xếp những hộp giấy này lồng vào nhau cho gọn.
Giả sử có N hộp giấy, các hộp được đánh số từ 1 đến N. Với mỗi hộp giấy,
bé Ri biết được chính xác độ dài hai cạnh đáy của hộp là a và b.
Yêu cầu: Hãy giúp bé Ri xếp các hộp sao cho số lượng các hộp lồng vào nhau là
lớn nhất.
Dữ liệu vào: Cho trong file văn bản XEPHOP.INP, có cấu trúc như sau:
- Dòng 1: Ghi số nguyên dương N, là số lượng hộp giấy. (1 ≤ N ≤ 1000)
- N dòng tiếp theo: Mỗi dòng ghi hai số nguyên dương a
i
b
i
, là độ dài hai cạnh đáy
của hộp giấy thứ i. (1 ≤ a
i
, b
i
≤ 32767)
Dữ liệu ra: Ghi ra file văn bản XEPHOP.OUT theo cấu trúc như sau:
- Dòng 1: Ghi số nguyên dương M là số lượng các hộp giấy lồng nhau tìm được.
- Dòng 2: Ghi M số nguyên dương, là chỉ số của M hộp giấy theo thứ tự từ ngoài
vào trong của một cách xếp hộp.
Ví dụ:
XEPHOP.INP XEPHOP.OUT
5
1 5
5 7
6 4
3 6
2 5
3
2 3 5
==HẾT==
3
Sở GD&ĐT kỳ thi CHọN học sinh giỏi cấp tỉnh lớp 12 THPT
Quảng bình năm học 2012 - 2013
Môn thi: tin học - Vòng iI
hớng dẫn chấm
I. Phng phỏp:
- Giỏm kho to b d liu vo, tớnh toỏn kt qu. Thc hin chng trỡnh ca
hc sinh v so sỏnh kt qu.
- Giỏm kho cú th s dng chng trỡnh gi ý di õy tớnh toỏn kt qu
ca d liu vo.
- Chng trỡnh hc sinh ỳng mt b test, giỏm kho cho 0,5 im. Nh vy,
nu mt cõu cú 3 im thỡ giỏm kho phi to 6 b test.
- Vi mi cõu, giỏm kho phi to c ớt nht mt b test cú khụng gian d
liu ln.
- Riờng Cõu 3, ch s cỏc hp c chn ca HS cú th khỏc vi ỏp ỏn. Nu
kt qu ca hc sinh khỏc ỏp ỏn nhng vn ỳng thỡ giỏm kho vn cho im ti
a.
II. Chng trỡnh gi ý:
Cõu 1: (3,0 im) Tớnh din tớch tam giỏc
{$r+}
const fi='dt.inp';
fo='dt.out';
type mm=array [1 4] of integer;
var a,b:mm; f:text; s:real;
procedure nhap;
var i:integer;
begin
assign(f,fi); reset(f);
for i:=1 to 3 do readln(f,a[i],b[i]);
close(f);
end;
procedure xuly;
var i:integer; T1,T2:LONGINT;
begin
a[4]:=a[1]; b[4]:=b[1];
s:=0;
for i:=1 to 3 do
begin
t1:=b[i+1]+b[i];
t2:=a[i+1]-a[i];
s:=s+(t1*t2)/2;
end;
end;
procedure xuat;
begin
assign(f,fo);
rewrite(f);
write(f,abs(s):0:1);
close(f);
end;
begin
nhap; xuly; xuat;
end.
Cõu 2: (3,5 im) t vộ vo sõn NouCamp
Const fi='noucamp.in1';
4
fg='noucamp.out';
maxn=51000;
type mmc=array[1 maxn] of byte;
var a:mmc; ti,n,m:longint;
procedure xl;
var f:text; i,x:longint; by,bi:word;
begin
fillchar(a,sizeof(a),0);
assign(f,fi);reset(f);
readln(f,n,m);
for i:=1 to m do
begin
read(f,x);
by:=(x div 8)+1;
bi:= x mod 8;
if bi=0 then
begin
bi:=8;
by:=by-1;
end;
a[by]:=a[by] or (1 shl (bi-1));
end;
close(f);
end;
procedure xuat;
var f:text; i,j:longint;
begin
assign(f,fg);rewrite(f);
{writeln(f,n-m);}
for i:= 1 to n div 8 do
for j:=1 to 8 do
if ((a[i] shr (j-1)) and 1)=0 then write(f,(i-1)*8+j,' ');
close(f);
end;
begin xl; xuat; end.
Câu 3: (3,5 điểm) Xếp hộp lồng nhau
{$R+,Q+}
{$M 63840,0,655360}
Const Fi='xephop.in1';
Fo='xephop.out';
Type Mang=Array[0 5000] of integer;
Var A,b,vt:Mang; F:Text; M,n:integer;
Function Max(a,b:Integer):integer;
Begin
Max:=a;
If b>a then Max:=b;
End;
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 Init;
Var S:Array[0 5000] Of Longint;
I,j:Integer;
procedure Sort(l, r: Integer);
var
i, j, x, y: Longint;
5
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;
if i <= j then
begin
{ y := a[i]; a[i] := a[j]; a[j] := y;}
Doi1(a[i],a[j]); Doi1(b[i],b[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 vt[i]:=i;
For i:=1 to n do
Begin
Readln(f,a[i],b[i]);
If A[i]<b[i] then Doi1(a[i],b[i]);
End;
Close(f);
Fillchar(s,sizeof(s),0);
For i:=1 to n do
S[i]:=longint(a[i])*Longint(b[i]);
Sort(1,n);
End;
Function Bao(i,j:Integer):boolean;
Begin
Bao:= (a[j]>a[i]) And (b[j]>b[i]);
End;
Procedure Qhd;
Var I,j,maxx,v:Integer;
Tr,sl:Array[0 5000] Of Integer;
Begin
For i:=1 to n do sl[i]:=1;
For i:=2 to n do
For j:=i-1 downto 1 do
If sl[j]+1>sl[i] then
if Bao(j,i) then
Begin
Tr[i]:=j;
Sl[i]:=sl[j]+1;
End;
Maxx:=1;
V:=1;
For i:=1 to n do
If Maxx<sl[i] then
Begin
Maxx:=sl[i]; V:=i;
End;
Assign(f,fo);
Rewrite(f);
Writeln(f,maxx);
For i:=1 to maxx do
Begin
Sl[i]:=v; V:=tr[v];
End;
For i:= 1 to maxx do Writeln(f,Vt[sl[i]],' ');
Close(f);
6
End;
Begin
Init; Qhd;
End.