Tải bản đầy đủ (.pdf) (4 trang)

Đề thi chọn học sinh giỏi môn Tin học lớp 12 lần 2 năm học 2012-2013 – Sở Giáo dục và Đào tạo Ninh Bình (Đề chính thức)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (448.93 KB, 4 trang )

SỞ GD&ĐT NINH BÌNH
ĐỀ THI CHÍNH THỨC

ĐỀ 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
Ngày thi: 18/12/2012
(Thời gian làm bài: 180 phút)

Đề thi gồm 03 câu, trong 01 trang
Câu 1 (7 điểm): Diện tích đa giác (file bài làm: bai1.pas)
Tính diện tích đa giác lồi N đỉnh: A1A2A3...AN, biết các đỉnh Ai (1   i   N) có tọa độ (xi; yi).
Dữ liệu: File văn bản BAI1.INP:
Dòng 1: Một số nguyên dương N (3   N   100).
Dòng 2: Chứa 2N số nguyên: x1, y1, x2, y2,.., xN, yN theo thứ tự đó, (|xi|, |yi|    100, 1   i   N).
Kết quả:  File văn bản BAI1.OUT, ghi kết quả  tìm được sau khi làm tròn đến 3 chữ  số  sau dấu 
phẩy.
Ví dụ:
BAI1.INP
BAI1.OUT
4
1.000
0 0 0 1 1 1 1 0
Câu 2 (7 điểm): Lược đồ số hữu tỉ (file bài làm: bai2.pas) 
Cantor là nhà toán học nổi tiếng, một trong những chứng minh  
quan trọng của ông là việc chỉ ra rằng lực lượng tập số hữu tỉ đúng 
bằng lực lượng tập số  tự  nhiên. Cơ  sở  của chứng minh đó là lược  
đồ số hữu tỉ như hình bên. Trong lược đồ này, số đầu tiên là 1/1, số 
thứ 2 là 1/2, số thứ 3 là 2/1, số thứ 4 là 3/1, số thứ 5 là 2/2…
Yêu cầu: Với số nguyên dương N, hãy tìm phân số thứ N trong lược  
đồ số hữu tỉ nói trên.



1/1
2/1
3/1
4/1
5/1

1/2 1/3 1/4 1/5...
2/2 2/3 2/4
3/2 3/3
4/2

...

Dữ liệu: File văn bản BAI2.INP chứa số nguyên dương N (N   107).
Kết quả: File văn bản BAI2.OUT, ghi hai số  nguyên dương là tử  số  và mẫu số  của phân số  tìm  
được.
Ví dụ:
BAI2.INP
BAI2.OUT
BAI2.INP
BAI2.OUT
4
3 1
8
2 3
Câu 3 (6 điểm): Dãy chia hết (file bài làm: bai3.pas)
Xét một dãy số nguyên gồm N phần tử. Viết dãy số  đó theo thứ  tự  từ  trái sang phải, sau đó 
đặt giữa mỗi cặp số cạnh nhau dấu cộng '+' hoặc trừ '­', khi đó ta thu được một biểu thức số học. 
Ta nói dãy số là chia hết cho K nếu tồn tại một cách đặt dấu để  thu được biểu thức số  học chia 

hết cho K. 
Yêu cầu: Hãy xác định dãy số đã cho có chia hết cho K hay không.
Dữ liệu: File văn bản BAI3.INP:
Dòng đầu là hai số nguyên N và K (2 ≤ N ≤ 104, 2 ≤ K ≤ 100). 
Các dòng tiếp theo là dãy N số nguyên, mỗi số có giá trị tuyệt đối không quá 104.   
Kết quả: File văn bản BAI3.OUT, ghi số 0 hoặc 1 tương  ứng với dãy không chia hết hoặc chia hết  
cho K.
Ví dụ:
BAI3.INP
BAI3.OUT
BAI3.INP
BAI3.OUT


4 7
1 2 3 5

1

4 6
1 2 3 5

0

Chú ý:  ­ Mỗi bài có 60% số test kích thước dữ liệu nhỏ.
  ­ Trong file dữ liệu hoặc kết quả, trên 1 dòng, hai giá trị cạnh nhau cách nhau 1 dấu  
cách.
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­Hết­­­­­­­­­­­­­­­­­­­­­­­­­­
Họ và tên thí sinh :.....................................................................…………..Số báo 
danh .............................

Họ và tên, chữ ký: Giám thị 
1:.....................................................................................................................
                              Giám thị 
2:......................................................................................................................

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 ­­­



×