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... Khi xoá một
Trang 1sở giáo dục - đào tạo kỳ thi chọn học sinh giỏi lớp 12 Quảng bình 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ụ:
3 Anh aBc
Dqk xYz
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.
Trang 2Ví dụ:
4
4 1 1 15 1 15 8 1 8
4 9 3 9 6 4 6 4 3
4 3 2 11 2 11 7 3 7
3 8 4 8 5 6 5
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 ai<ai+1 (i = 1 k-1)
Yê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ụ:
11
10 100 20 1 2 3 30 20 103 104 80 6 4 5 6 7 9 10
Hết
2
Trang 3Hớ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;
Trang 4xuli;
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
Trang 5end;
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]<l[j]) and(a[i]<a[j]) then
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;
{******************************}
Trang 6docfile;
qh;
ghifile;
end
HÕt
6