Tải bản đầy đủ (.doc) (6 trang)

Download đề và đáp án thi học sinh giỏi lớp 12 môn tin học 2006 2007 tỉnh quảng bình (vòng 1)

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 (89.57 KB, 6 trang )

sở giáo dục - đào tạo
Quảng bình

kỳ thi chọn học sinh giỏi lớp 12
năm học 2006-2007

Đề chính thức - môn : tin học (vòng 1)

SBD:

Thời gian làm bài: 180 phút.
Đề ra

Câu 1: (3,0 điểm) Mã hoá
(tên file bài làm MAHOA.PAS)
Để mã hoá một văn bản gồm toàn chữ cái từ A..Z và a..z, ngời ta có
thể làm nh sau: Xếp bảng chữ cái theo vòng tròn, sau đó thay mỗi kí tự bằng kí tự
đứng sau nó N vị trí trong bảng vòng tròn.
Ví dụ: Với N = 7 thì anh đợc mã hoá thành huo.
Cho một xâu ký tự S1 cần mã hoá và một xâu đã đợc mã hoá S2
Yêu cầu: Mã hoá xâu kí tự S1 và giải mã xâu kí tự S2.
Dữ liệu vào: Cho trong file văn bản MAHOA.INP, có cấu trúc nh sau:
Dòng 1: Ghi số nguyên N (1 N 100).
Dòng 2: Ghi xâu S1 (S1 không quá 255 ký tự)
Dòng 3: Ghi xâu S2 (S2 không quá 255 ký tự)
Dữ liệu ra: Ghi ra file văn bản MAHOA.OUT, theo cấu trúc nh sau:
Dòng 1: Ghi xâu mã hoá của xâu S1
Dòng 2: Ghi xâu giải mã của xâu S2
Ví dụ:
Mahoa.INP
Mahoa.out


3
Dqk
Anh
xYz
aBc
Câu 2: (3,5 điểm) Đa giác
(tên file bài làm DAGIAC.PAS)
Cho N đa giác lồi, đợc đánh số từ 1..N, thoả mãn tính chất: Với 2 đa giác bất kỳ
luôn có một đa giác mà mọi điểm của nó nằm trong đa giác kia và các cạnh của
chúng không có điểm chung.
Yêu cầu: Với mỗi đa giác i, hãy xác định có bao nhiêu đa giác bao nó?
Dữ liệu vào: Cho trong file văn bản DAGIAC.INP, có cấu trúc nh sau:
Dòng 1: Ghi số nguyên N (3 N 1000).
N dòng tiếp theo: Dòng thứ i + 1 ghi thông tin về đa giác thứ i. Bao gồm số đầu
tiên Si là số đỉnh của đa giác (Si 3); Si cặp số nguyên tiếp theo (Xi Yi) lần lợt là
hoành độ và tung độ các đỉnh của đa giác (-32767 Xi, Yi 32767).
Các số trên cùng một dòng đợc ghi cách nhau ít nhất một dấu cách.
Dữ liệu ra: Ghi ra file văn bản DAGIAC.OUT

Gồm N dòng, dòng thứ i: Ghi số lợng đa giác bao đa giác thứ i.

1


Ví dụ:
4
4
4
4
3


DAGIAC.INP
1
9
3
8

1
3
2
4

15 1 15 8 1 8
9 6 4 6 4 3
11 2 11 7 3 7
8 5
6 5

DAGIAC.OUT
0
2
1
3

Câu 3: (3,5 điểm) Dãy con
(tên file bài làm DAYCON.PAS)
Cho một dãy số nguyên a1, a2,..., an. Khi xoá một số phần tử của dãy và giữ
nguyên thứ tự của các phần tử còn lại ta đợc một dãy gọi là dãy con của dãy đã cho.
Một dãy con a1, a2,..., ak đợc gọi là tăng dần nếu aiYêu cầu: Hãy xác định dãy con tăng dần có số lợng phần tử lớn nhất.

Dữ liệu vào: Cho trong file văn bản DAYCON.INP, có cấu trúc nh sau:
Dòng 1: Ghi số nguyên N là số phần tử của dãy (1 N 1000)
Dòng 2: Ghi N số nguyên là các phần tử của dãy (1 ai 32767). Các số đợc ghi cách nhau một dấu cách.
Dữ liệu ra: Ghi ra file văn bản DAYCON.OUT, theo cấu trúc nh sau:
Dòng 1: Ghi số M là số lợng phần tử lớn nhất của dãy con tìm đợc.
Dòng 2: Ghi M số nguyên là chỉ số của M phần tử trong dãy con tìm đợc
theo thứ tự tăng dần. Các số đợc ghi cách nhau một dấu cách.
Ví dụ:

Daycon.inp
11
10 100 20 1 2 3 30 20 103 104 80

Daycon.out
6
4 5 6 7 9 10

Hết

2


Hớng dẫn chấm
đề thi chính thức học sinh giỏi lớp 12
năm học 2006-2007
I/ Phơng pháp chung
- Giám khảo tạo các bộ dữ liệu vào, tính toán kết quả. Chạy 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 ý để tính kết quả của dữ liệu vào:
MAHOA.PAS

DAGIAC.PAS DAYCON.PAS
- Chơng trình học sinh chạy đúng mỗi bộ test, giám khảo cho 0,5 điểm. Nh vậy,
nếu câu hỏi có 3,0 điểm thì giám khảo phải tạo đợc 6 bộ test.
- Nếu chơng trình chạy sai test nào thì giám khảo cho 0 điểm đối với test đó.
- Bài toán có thể có nhiều kết quả đúng, nếu kết quả của học sinh khác với đáp
án nhng 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: MAHOA.PAS
{$r+}
Const

fi='mahoa.inp';
fo='mahoa.out';
var
s1,s2:string;
khoa:word;
procedure docdl;
var
f:text;
begin
assign(f,fi);
reset(f);
readln(f,khoa);
readln(f,s1);
readln(f,s2);
close(f);
end;
procedure xuli;
var
i:byte;

begin
if khoa>26 then khoa:=khoa mod 26;
for i:=1 to length(s1) do
if s1[i] in ['A'..'Z'] then
s1[i]:=chr((((ord(s1[i])-39)+khoa)mod 26)+65)
else
if s1[i] in ['a'..'z'] then
s1[i]:=chr((((ord(s1[i])-71)+khoa)mod 26)+97);
for i:=1 to length(s2) do
if s2[i] in ['A'..'Z'] then
s2[i]:=chr((((ord(s2[i])-39)-khoa)mod 26)+65)
else
if s2[i] in ['a'..'z'] then
s2[i]:=chr((((ord(s2[i])-71)-khoa)mod 26)+97);
end;
procedure xuatdl;
var
f:text;
begin
assign(f,fo);
rewrite(f);
writeln(f,s1);
writeln(f,s2);
close(f);
end;
begin
docdl;

3



xuli;
xuatdl;
end.

C©u 2: DAGIAC.PAS
const fi = 'dagiac.in1';
fo = 'dagiac.out';
Max = 10000;
type mang = array[1..Max] of integer;
var a, vt, kq : mang;
var n : integer;
procedure chuanbi;
begin
assign(input,fi);
reset(input);
assign(output,fo);
rewrite(output);
end;
procedure nhap;
var i, j, min, k, x, y : integer;
begin
read(n);
for i := 1 to n do
begin
read(k);
min := maxint;
for j := 1 to k do
begin
read(x,y);

if x < min then min := x;
end;
a[i] := min;
vt[i] := i;
end;
end;
procedure Sort(l, r: Integer);
var i, j, x, y: integer;
begin
i := l; j := r; x := a[(l+r) DIV 2];
repeat
while a[i] < x do i := i + 1;
while x < a[j] do j := j - 1;
if i <= j then
begin
y := a[i]; a[i] := a[j]; a[j] := y;
y := vt[i]; vt[i] := vt[j]; vt[j] := y;
i := i + 1; j := j - 1;
end;
until i > j;
if i < r then Sort(i, r);
end;
procedure xuli;
var i : integer;
begin
Sort(1,n);
for i := 1 to n do
kq[vt[i]] := i - 1;
for i := 1 to n do
writeln(kq[i]);

end;
procedure xulikt;
begin
close(input);

4


close(output)
end;
begin
chuanbi;
nhap;
xuli;
xulikt;
end.

C©u 3 : DAYCON.PAS
{$r+}
const max=10000;
fi='daycon.inp';
fo='daycon.out';
var
a,t,l:array[0..max+1]of integer;
n:word;
procedure docfile;
var
f:text;
i:integer;
begin

assign(f,fi);
reset(f);
readln(f,n);
for i:=1 to n do
read(f,a[i]);
close(f);
end;
procedure qh;
var
j,i,jmax:integer;
begin
a[0]:=-32768;
a[n+1]:=32767;
l[n+1]:=1;
for i:=n downto 0 do
begin
jmax:=n+1;
for j:=i+1 to n+1 do
if (l[jmax]jmax:=j;
l[i]:=l[jmax]+1;
t[i]:=jmax;
end;
end;
procedure ghifile;
var
f:text;
i:integer;
begin
assign(f,fo);

rewrite(f);
writeln(f,l[0]-2);
i:=t[0];
while i<>n+1 do
begin
write(f,i,' ');
i:=t[i];
end;
close(f);
end;
{******************************}

5


begin
docfile;
qh;
ghifile;
end.

HÕt

6



×