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

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

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 (208.97 KB, 11 trang )

Sở Giáo dục-Đào tạo
Quảng bình
SBD :
Đề chính thức

kỳ thi CHọN học sinh giỏi lớp 12
năm học 2007-2008
môn: tin học vòng i

Thi gian 180 phỳt, khụng k thi gian giao

RA
Cõu 1: (3.0 im) Sp xp dóy s
SAP.PAS
Cho mt dóy s nguyờn gm N phn t A1, A2, ..., An. Trong ú cỏc phn t
ụi mt khỏc nhau.
Yờu cu: Hóy sp xp dóy theo th t tng dn.
D liu vo: Cho trong file vn bn SAP.INP, cú cu trỳc nh sau:
-Dũng 1: Ghi s nguyờn dng N, l s lng phn t ca dóy s. (1<=N<=32000)
-Dũng 2: Ghi N s nguyờn Ai l giỏ tr ca cỏc phn t ca dóy, cỏc s c ghi
cỏch nhau ớt nht mt du cỏch (0D liu ra: Ghi ra file vn bn SAP.OUT, theo cu trỳc nh sau:
-Dũng 1: Ghi N s nguyờn Ai sau khi ó c sp xp, cỏc s c ghi cỏch nhau
ớt nht mt du cỏch.
Vớ d:
SAP.INP
SAP.OUT
4
0 1 4 32000
1 32000 0 4
Gii hn thi gian thc hin chng trỡnh khụng quỏ 0.5 giõy i vi mi


trng hp ca d liu vo.
Cõu 2: (3.5) S siờu nguyờn t
SNT.PAS
Ngi ta nh ngha: S siờu nguyờn t l mt s nguyờn t m khi loi b
i mt s lng tu ý cỏc ch s bờn phi ca nú thỡ phn cũn li vn to thnh
mt s nguyờn t.
Vớ d: S 7331 l mt s siờu nguyờn t cú 4 ch s vỡ 733, 73, 7 cng l
cỏc s nguyờn t.
Yờu cu:
Vi mt s nguyờn dng N cho trc, hóy tỡm tt c cỏc s siờu nguyờn t
cú N ch s.
D liu vo: Cho trong file vn bn SNT.INP cú cu trỳc nh sau:
- Dũng 1: Ghi s nguyờn dng N (0< N <10).
D liu ra: Ghi ra file vn bn SNT.OUT theo cu trỳc:
- Dũng 1: Ghi s nguyờn dng K, l lng cỏc s siờu nguyờn t tỡm c.
- K dũng tip theo: Mi dũng ghi mt s nguyờn dng, l giỏ tr ca s siờu
nguyờn t tỡm c.
Vớ d:
SNT.INP SNT.OUT
2
9
23


29
31
37
53
59
71

73
79

Câu 3: (3.5 điểm) Hoán vị nhỏ nhất
PER.PAS
Giả sử a1, a2,..,an là dãy hoán vị của các số tự nhiên từ 1 đến N.
Ngời ta định nghĩa: Giá trị của một dãy hoán vị là số thu đợc khi ghép các
chữ số trong dãy lại với nhau. Chẳng hạn, với N=4, ta có dãy hoán vị 4 1 3 2.
Khi đó, giá trị của dãy hoán vị là 4132.
Cho số N và dãy hoán vị a1, a2, ..., an của các số tự nhiên từ 1 đến N.
Yêu cầu: Hãy tìm hoán vị b1, b2, ..., bn của các số tự nhiên từ 1 đến N sao cho thỏa
mãn đồng thời hai tính chất:
+ |ai - bi| <= 1 (i=1..N)
+ Giá trị của dãy hoán vị b1, b2, ..., bn là nhỏ nhất
Dữ liệu vào: Cho trong file văn bản PER.INP, có cấu trúc nh sau:
-Dòng 1: Ghi số nguyên dơng N. (3 <= N <=9).
-Dòng 2: Ghi N số tự nhiên a1 a2 ... an là dãy hoán vị của các số từ 1 đến N. Các số
ghi cách nhau ít nhất một dấu cách.
Dữ liệu ra: Ghi ra file văn bản PER.OUT, theo cấu trúc nh sau:
-Dòng 1: Ghi N số tự nhiên b1 b2 ... bn là dãy hoán vị tìm đợc theo yêu cầu. Các số
đợc ghi cách nhau ít nhất một dấu cách.
Ví dụ:
PER.INP
PER.OUT
8
6 4 7 8 5 1 2 3
7 5 6 8 4 1 3 2
Gii hn thi gian thc hin chng trỡnh khụng quỏ 1 giõy i vi mi
trng hp ca d liu vo


Sở Giáo dục-Đào tạo
Quảng bình
SBD :
Đề chính thức

kỳ thi CHọN học sinh giỏi lớp 12
năm học 2007-2008
môn: tin học vòng iI

Thi gian 180 phỳt, khụng k thi gian giao
RA


Câu 1: (3.0 điểm) Cắt số
CATSO.PAS
Cho một số nguyên dơng N gồm có M chữ số. (1<=M<=2000). Tìm cách
xóa đi trong N gồm K chữ số để đợc số N sao cho N có giá trị nhỏ nhất. (K < M)
Dữ liệu vào: Cho trong file văn bản CATSO.INP, có cấu trúc nh sau:
- Dòng 1: Ghi số hai nguyên dơng N và K. Hai số đợc ghi cách nhau ít nhất 1 dấu
cách.
Dữ liệu ra: Ghi ra file văn bản CATSO.OUT, theo cấu trúc nh sau:
- Dòng 1: Ghi số N tìm đợc. (Vẫn giữ nguyên các chữ số 0 ở đầu số N nếu có)
Ví dụ:
CATSO.INP
CATSO.OUT
60037 2
003
Câu 2: (3.0 điểm) Dãy khả đối xứng
DKDX.PAS
Cho một dãy số S gồm N phần tử nguyên dơng A1, A2,..., An.

Ngời ta định nghĩa: Dãy S đợc gọi là đối xứng nếu với mọi giá trị i:=1.. (N
div 2) +1 ta luôn có Ai =A(n-i+1). Chẳng hạn, dãy số 1 3 2 3 1 là dãy đối xứng, dãy số
1 2 3 1 3 không phải là dãy đối xứng.
Một dãy S đợc gọi là khả đối xứng nếu ta có thể sắp xếp lại các phần tử của
dãy sao cho thu đợc một dãy đối xứng. Chẳng hạn: dãy số 1 2 3 1 3 là dãy khả đối
xứng, vì ta có thể sắp xếp lại dãy nh sau : 1 3 2 3 1, đây là một dãy đối xứng.
Cho một dãy số S.
Yêu cầu: Hãy xét xem dãy S có phải là dãy khả đối xứng hay không?
Dữ liệu vào: Cho trong file văn bản DKDX.INP, có cấu trúc nh sau:
Dòng 1: Ghi số nguyên dơng N là số lợng phần tử của dãy số S (1<=N<=100).
Dòng 2: Ghi N giá trị nguyên Ai, là giá trị của N phần tử của dãy số S. Các phần tử
đợc ghi cách nhau ít nhất một dấu cách. (1<=Ai<=32767)
Dữ liệu ra: Ghi ra file văn bản DKDX.OUT, theo cấu trúc nh sau:
Dòng 1: Nếu S là dãy khả đối xứng thì ghi Y, ngợc lại thì ghi N. (ký tự đợc ghi in
hoa)
Ví dụ:
DKDX.INP
DKDX.OUT
DKDX.INP
DKDX.OUT
5
Y
5
N
2 1 4 4 1
2 3 4 4 1
Cõu 3: (4.0 im) Nỳt cha chung gn nht
ANCES.PAS
Cõy l mt cu trỳc d liu cú nhiu ng dng trong tin hc. Vớ d ta cú cõy
vi 16 nỳt, cỏc nỳt c ỏnh s t 1 n 16, nỳt 8 l gc, nh hỡnh sau:

Nỳt x c gi l nỳt cha ca y, nu tn ti mt ng dn t gc ti y i
qua x. cõy ang xột, nỳt 4 l nỳt cha ca nỳt 16, nỳt 10 cng l nỳt cha ca 16.

Mt nỳt ng thi l nỳt cha ca chớnh mỡnh. cõy ang xột, cỏc nỳt 8, 4,
10 v 16 l nỳt cha ca 16.


Nút x được gọi là nút cha chung của hai nút khác nhau y và z, nếu nó vừa là
nút cha của y, vừa là nút cha của z. Ở cây đang xét, các nút 8 và 4 đều là nút cha
chung của các nút 7 và 16.
Nút x được gọi là nút cha chung gần nhất của y và z, nếu nó là nút cha chung
của hai nút này và trên đường dẫn từ x tới y không còn nút cha chung nào khác của
y và z. Ở cây đang xét, 4 là nút cha chung gần nhất của 7 và 16.
Cho một cây gồm N nút, các nút được đánh số từ 1 đến N.
Yêu cầu: Xác định nút cha chung gần nhất của hai nút khác nhau trên cây.
Dữ liệu vào: Cho trong file văn bản ANCES.INP, có cấu trúc như sau:
- Dòng 1: Chứa số 2 nguyên dương N và K. Trong đó N là số lượng nút của cây, K
là chỉ số nút gốc. 2 ≤ N ≤ 10000.
- N-1 dòng tiếp theo: mỗi dòng chứa 2 số nguyên dương x và y, là chỉ số 2 nút liên
tiếp của cây với x là nút cha của nút y.
- Dòng cuối cùng: chứa 2 số nguyên khác nhau là chỉ số 2 nút cần tìm nút cha
chung gần nhất.
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 ANCES.OUT theo cấu trúc:
- Dòng 1: Ghi một số nguyên dương là chỉ số nút cha chung gần nhất tìm được.
Ví dụ:
ANCES.INP
ANCES.OUT
16 8
4

1 14
8 5
10 16
5 9
4 6
8 4
4 10
1 13
6 15
10 11
6 7
10 2
16 3
8 1
16 12
16 7


Hớng dẫn chấm thi chọn học sinh giỏi lớp 12
năm học 2007-2008
đề thi vòng 1

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ả. 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 kết quả của dữ
liệu vào.
- 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 đ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 đó.

II/ Chơng trình gợi ý
Cõu 1: Sp dóy tng dn
{OK}
const

fi='sap.inp';


fo='sap.out';
var n:integer;
xl:array[1..32000] of boolean;
f:text;
procedure nhap;
var i,a:integer;
begin
assign(f,fi);
reset(f);
readln(f,n);
for i:=1 to n do
begin
read(f,a);
xl[a]:=true;
end;
close(f);
end;
procedure xuat;
var i:integer;
begin
assign(f,fo);
rewrite(f);

for i:=1 to 32000 do
if xl[i]=true then write(f,i,' ');
close(f);
end;
begin
nhap;
xuat;
end.

Câu 2: Số siêu nguyên tố
const

fi='snt.inp';
fo='snt.out';
Type
mmc=array [1..1000] of longint;
var
a,b:mmc;
f:text;
n,ka,kb:longint;
function snt(x:longint):boolean;
var i:longint;
begin
if (x=0) or (x=1) then snt:=false
else
begin
i:=2;
while (x mod i <> 0) and (i<=sqrt(x)) do i:=i+1;
if i> sqrt(x) then snt:=true else snt:=false;
end;

end;
procedure doc;
begin
assign(f,fi);reset(f);
readln(f,N);
close(f);
end;
procedure xl;
var i,k,cs:longint;
begin
ka:=1;
a[ka]:=0;
For i:=1 to N do
Begin
Kb:=0;
For k:=1 to ka do
For cs:=0 to 9 do
If snt(a[k]*10+cs) then
Begin


Inc(kb);
b[kb]:=a[k]*10+cs;

end;
ka:=kb;
For k:=1 to ka do a[k]:=b[k];
end;
end;
procedure xuat;

var
k:longint;
begin
assign(f,fo);rewrite(f);
writeln(f,ka);
For k:=1 to ka do Writeln(f,a[k]);
close(f);
end;
BEGIN
doc;
xl;
xuat;
END.

Câu 3: Hoán vị nhỏ nhất
{$r+} {OK}
program PER;
const
fi='per.in3';
fo='per.ou3';
var
f:text;
A,C:array[1..200] of integer;
B:array[0..200] of 0..1;
n:integer;
procedure nhap;
var
i:integer;
begin
Assign(f,fi);

reset(f);
readln(f,n);
read(f,a[1]);
If A[1]=1 then B[A[1]]:=1
else B[A[1]]:=0;
For i:=2 to n do
begin
read(f,A[i]);
C[A[i]]:=i;
end;
close(f);
end;
{-------------------------------------------}
procedure Khoi_tao;
begin
Fillchar(A,sizeof(a),0);
Fillchar(B,sizeof(b),0);
B[0]:=1;
end;
{------------------------------------------}
Procedure tim_thay_the;
var i:integer;
begin
For i:=1 to n do
If (B[A[i]]=0) and (B[a[i]-1]=0) and (C[a[i]]begin
A[i]:=A[i]-1;
B[a[i]]:=1;
A[c[a[i]]]:=A[c[a[i]]]+1;
B[A[c[a[i]]]]:=1;



end;
end;
{-----------------------------------------}
Procedure xuat;
var i:integer;
begin
Assign(f,fo);
rewrite(f);
For i:=1 to n do Write(f,A[i],' ');
close(f);
end;
{------------------------------------------}
begin
Khoi_tao;
nhap;
tim_thay_the;
xuat;
end.

Hớng dẫn chấm thi chọn học sinh giỏi lớp 12
năm học 2007-2008
đề thi vòng 2

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ả. 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 kết quả của dữ
liệu vào.

- 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 đ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 đó.
II/ Chơng trình gợi ý
Cõu 1: Ct s
{$R+} {OK}
Const fi='CATSO.IN1';
fo='CATSO.OU9';
Var mang:Array[0..35000] of Byte;
k,dem:Word;
f,g:Text;


time:longint;
procedure nhap;
Var ch:Char;
code:Integer;
Begin
Assign(f,fi);
reset(f);
assign(g,fo);
rewrite(g);
Read(f,ch);
dem:=0;
While ch<>' ' do
Begin
Inc(dem);
Val(ch,mang[dem],code);
Read(f,ch);
End;

Read(f,k);
Close(f);
End;
Procedure Xuli;
Var i,j,h:Word;
Begin
For i:=1 to k do
Begin
j:=1;
While (mang[j]<=mang[j+1]) and (j<>dem) do Inc(j);
For h:=j to dem do mang[h]:=mang[h+1];
dec(dem);
End;
End;
procedure xuat;
Var i:Word;
Begin
For i:=1 to dem do
Write(g,mang[i]);
Close(g);
End;
Begin

End.

time:=meml[0:$46c];
nhap;
Xuli;
xuat;
writeln('Thoi gian ',(meml[0:$46c]-time)/18.21:8:4);

readln;

Câu 2: Dãy khả đối xứng
const

fi='dkdx.inp';
fo='dkdx.out';
maxn=32767;
type mmc=array[1..maxn] of byte;
var a:mmc;
n:integer;
f:text;
procedure
doc;
var i,x:integer;
begin
assign(f,fi);
reset(f);
readln(f,n);
for i:=1 to N do
begin
read(f,x);
a[x]:=a[x]+1;
end;


close(f);
end;
procedure xl;
var i,dem:integer;

begin
dem:=0;
for i:=1 to maxn do
if a[i] mod 2<>0 then dem:=dem+1;
assign(f,fo);rewrite(f);
if dem>1 then write(f,'N') else write(f,'Y');
close(f);
end;
Begin
doc;
xl;
End.

Câu 3: Nút cha chung gần nhất
s{$R+}
{xong}
{OK}
const fi='ances.in3';
fo='ances.ou3';
type a=array[0..10000] of word;
b=array[0..10000] of 0..1;
var mang:a;
mang1:b;
n,k,tim1,tim2:word;
f,g:text;
procedure nhap;
var i,x,y:word;
begin
assign(f,fi);
assign(g,fo);

reset(f);
rewrite(g);
readln(f,n,k);
for i:= 1 to n-1 do
begin
readln(f,x,y);
mang[y]:=x;
end;
mang[k]:=0;
readln(f,tim1,tim2 );
close(f);
end;
procedure
xuli;
var h:word;
begin
if tim1=tim2 then
begin
writeln(g,tim1);
exit;
end;
h:= tim1;
while h<> 0 do
begin
mang1[h]:=1;
h:=mang[h];
end;
h:=tim2;
repeat
h:=mang[h]

until mang1[h]=1;
writeln(g,h);
end;
Begin
nhap;
xuli;


close(g);
end.



×