Dữ liệu vào: Cho trong file văn bản DT.INP, cú cấu trỳc 3 dũng, mỗi dũng chứa hai số nguyờn xi yi, là tọa độ của một đỉnh của tam giỏc ABC.. Làm trũn kết quả đến một chữ số sau dấu ngă
Trang 1Sở 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ử dụng ngụn ngữ lập trỡnh Turbo Pascal để lập trỡnh giải cỏc bài toỏn sau:
Trong hệ trục tọa độ Decac, cho ba điểm khụng thẳng hàng A, B, C cú tọa độ: A(x1, y1); B(x2, y2); C(x3, y3)
Yờu cầu: Tớnh diện tớch tam giỏc ABC.
Dữ liệu vào: Cho trong file văn bản DT.INP, cú cấu trỳc 3 dũng, mỗi dũng chứa
hai số nguyờn xi yi, là tọa độ của một đỉnh của tam giỏc ABC Cỏc số được ghi cỏch nhau ớt nhất một dấu cỏch (-2000 ≤ xi, yi ≤ 2000)
Dữ liệu ra: Ghi ra file văn bản DT.OUT, theo cấu trỳc:
- Dũng 1: Ghi diện tớch tam giỏc tỡm được Làm trũn kết quả đến một chữ số sau
dấu ngăn cỏch thập phõn
Vớ dụ:
DT.INP DT.OUT
0 0
1 0
0 1
0.5
Cõu 2: (3,5 điểm) Đặt vộ vào sõn NouCamp NOUCAMP.PAS
NouCamp là một sõn búng lớn Sõn cú N ghế ngồi, cỏc ghế được đỏnh số thứ tự từ 1 đến N
Tối nay, sõn NouCamp sẽ diễn ra trận đấu giữa hai đội búng lớn của thế giới: Barcelona và Real Madrid Hiện nay, một số ghế trờn sõn đó được khỏn giả đặt mua làm chỗ ngồi
Yờu cầu: Hóy kiểm tra xem trờn sõn cũn những ghế nào chưa được mua vộ đặt
chỗ
Trang 2Ví dụ:
16 10
2 3 6 7 8 9 10 12 15 16
1 4 5 11 13 14
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 ai bi, là độ dài hai cạnh đáy của hộp giấy thứ i (1 ≤ ai, bi ≤ 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==
Trang 3Së 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
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 ít nhất một bộ test có không gian dữ liệu lớn
- Riêng Câu 3, chỉ số các hộp được chọn của HS có thể khác với đáp án Nếu kết quả của học sinh khác đáp án nhưng vẫn đúng thì giám khảo vẫn cho điểm tối
đa
II Chương trình gợi ý:
Câu 1: (3,0 điểm) Tính diện 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];
Trang 4fg='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;
Trang 5begin
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;
Trang 6End;
Begin
Init; Qhd;
End