Đề thi và đáp án HSG lớp 12 (lần 2) môn Tin học tỉnh Ninh Bình 2012-2013

- 0 / 0
(Tài liệu chưa được thẩm định)
Nguồn: st
Người gửi: Phan Tuấn Hải (trang riêng)
Ngày gửi: 20h:29' 06-04-2016
Dung lượng: 714.6 KB
Số lượt tải: 23
Nguồn: st
Người gửi: Phan Tuấn Hải (trang riêng)
Ngày gửi: 20h:29' 06-04-2016
Dung lượng: 714.6 KB
Số lượt tải: 23
Số lượt thích:
0 người
HƯỚNG DẪN CHẤM THI CHỌN HỌC SINH GIỎI LỚP 12 THPT
Kỳ thi thứ hai - Năm học 2012 – 2013
MÔN: TIN HỌC
Chấm bằng chương trình tự động AMM2:
Câu 1: 70 test, mỗi test đúng cho 0,1 điểm.
Câu2: 70 test, mỗi test đúng cho 0,1 điểm.
Câu3: 60 test, mỗi test đúng cho 0,1 điểm.
Đáp án
Bài 1:
{$MODE ObjFPC}
const
iFn = `bai1.inp`;
oFn = `bai1.out`;
MAX_N = 100;
var
F: Text;
n: Integer;
x, y: array[0..MAX_N] of Integer;
i: Integer;
s: Real;
BEGIN
Assign(F, iFn); Reset(F);
ReadLn(F, n);
for i := 1 to n do
Read(F, x[i], y[i]);
Close(F);
x[0] := x[n]; y[0] := y[n];
for i := 1 to n do
s := s + (x[i-1]-x[i])*(y[i-1]+y[i]);
s := abs(s)/2;
Assign(F, oFn); Rewrite(F);
Write(F, s:0:3);
Close(F);
END.
Bài 2:
{$MODE ObjFPC}
const
iFn = `bai2.inp`;
oFn = `bai2.out`;
var
F: Text;
n: Integer;
d, a, b: Integer;
BEGIN
Assign(F, iFn); Reset(F);
ReadLn(F, n);
Close(F);
d := Trunc( (-1 + sqrt(1 + 8*n))/2 );
if d*(d+1) < 2*n then Inc(d);
a := n - (d-1)*d div 2;
b := d+1 - a;
Assign(F, oFn); Rewrite(F);
if Odd(d) then
Write(F, b, ` `, a)
else
Write(F, a, ` `, b);
Close(F);
END.
Bài 3:
{$MODE ObjFPC}
const
iFn = `bai3.inp`;
oFn = `bai3.out`;
MAX_N = 10000;
MAX_K = 100;
var
F: Text;
n, k: Integer;
a: array[1..MAX_N] of Integer;
t: array[0..1, 0..MAX_K-1] of Boolean;
i, i1, i2, j, z: Integer;
BEGIN
Assign(F, iFn); Reset(F);
ReadLn(F, n, k);
for i := 1 to n do
begin
Read(F, a[i]);
a[i] := (a[i] mod k + k) mod k;
end;
Close(F);
t[0, a[1]] := true;
for i := 2 to n do
begin
i1 := i and 1;
i2 := 1 - i2;
FillChar(t[i2], k, 0);
for j := k-1 downto 0 do
if t[i1, j] then
begin
t[i2, (j - a[i]+ k) mod k] := true;
t[i2, (j + a[i]) mod k] := true;
end;
end;
Assign(F, oFn); Rewrite(F);
Write(F, Ord(t[i2, 0]));
Close(F);
END.
--- HẾT ---
Kỳ thi thứ hai - Năm học 2012 – 2013
MÔN: TIN HỌC
Chấm bằng chương trình tự động AMM2:
Câu 1: 70 test, mỗi test đúng cho 0,1 điểm.
Câu2: 70 test, mỗi test đúng cho 0,1 điểm.
Câu3: 60 test, mỗi test đúng cho 0,1 điểm.
Đáp án
Bài 1:
{$MODE ObjFPC}
const
iFn = `bai1.inp`;
oFn = `bai1.out`;
MAX_N = 100;
var
F: Text;
n: Integer;
x, y: array[0..MAX_N] of Integer;
i: Integer;
s: Real;
BEGIN
Assign(F, iFn); Reset(F);
ReadLn(F, n);
for i := 1 to n do
Read(F, x[i], y[i]);
Close(F);
x[0] := x[n]; y[0] := y[n];
for i := 1 to n do
s := s + (x[i-1]-x[i])*(y[i-1]+y[i]);
s := abs(s)/2;
Assign(F, oFn); Rewrite(F);
Write(F, s:0:3);
Close(F);
END.
Bài 2:
{$MODE ObjFPC}
const
iFn = `bai2.inp`;
oFn = `bai2.out`;
var
F: Text;
n: Integer;
d, a, b: Integer;
BEGIN
Assign(F, iFn); Reset(F);
ReadLn(F, n);
Close(F);
d := Trunc( (-1 + sqrt(1 + 8*n))/2 );
if d*(d+1) < 2*n then Inc(d);
a := n - (d-1)*d div 2;
b := d+1 - a;
Assign(F, oFn); Rewrite(F);
if Odd(d) then
Write(F, b, ` `, a)
else
Write(F, a, ` `, b);
Close(F);
END.
Bài 3:
{$MODE ObjFPC}
const
iFn = `bai3.inp`;
oFn = `bai3.out`;
MAX_N = 10000;
MAX_K = 100;
var
F: Text;
n, k: Integer;
a: array[1..MAX_N] of Integer;
t: array[0..1, 0..MAX_K-1] of Boolean;
i, i1, i2, j, z: Integer;
BEGIN
Assign(F, iFn); Reset(F);
ReadLn(F, n, k);
for i := 1 to n do
begin
Read(F, a[i]);
a[i] := (a[i] mod k + k) mod k;
end;
Close(F);
t[0, a[1]] := true;
for i := 2 to n do
begin
i1 := i and 1;
i2 := 1 - i2;
FillChar(t[i2], k, 0);
for j := k-1 downto 0 do
if t[i1, j] then
begin
t[i2, (j - a[i]+ k) mod k] := true;
t[i2, (j + a[i]) mod k] := true;
end;
end;
Assign(F, oFn); Rewrite(F);
Write(F, Ord(t[i2, 0]));
Close(F);
END.
--- HẾT ---
 
↓ CHÚ Ý: Bài giảng này được nén lại dưới dạng RAR và có thể chứa nhiều file. Hệ thống chỉ hiển thị 1 file trong số đó, đề nghị các thầy cô KIỂM TRA KỸ TRƯỚC KHI NHẬN XÉT ↓















Các ý kiến mới nhất