Dữ liệu vào: Cho trong file văn bản SAP.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ố... Nút x được gọi là nút cha chung gần nhất của y và z, n
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 2007-2008
SBD : m«n: tin häc – vßng i vßng i
§Ò chÝnh thøc Thời gian 180 phút, không kể thời gian giao đề
ĐỀ RA
Cho một dãy số nguyên gồm N phần tử A1, A2, , An Trong đó các phần tử đôi một khác nhau.
Yêu cầu: Hãy sắp xếp dãy theo thứ tự tăng dần.
Dữ liệu vào: Cho trong file văn bản SAP.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ố (1<=N<=32000) -Dòng 2: Ghi N số nguyên Ai là giá trị của các phần tử của dãy, các số được ghi cách nhau ít nhất một dấu cách (0<Ai<32000)
Dữ liệu ra: Ghi ra file văn bản SAP.OUT, theo cấu trúc như sau:
-Dòng 1: Ghi N số nguyên Ai sau khi đã được sắp xếp, các số được ghi cách nhau
ít nhất một dấu cách.
Ví dụ:
4
1 32000 0 4
0 1 4 32000
Giới hạn thời gian thực hiện chương trình không quá 0.5 giây đối với mọi trường hợp của dữ liệu vào.
Người ta định nghĩa: Số siêu nguyên tố là một số nguyên tố mà khi loại bỏ
đi một số lượng tuỳ ý các chữ số bên phải của nó thì phần còn lại vẫn tạo thành một số nguyên tố
Ví dụ: Số 7331 là một số siêu nguyên tố có 4 chữ số vì 733, 73, 7 cũng là các số nguyên tố
Yêu cầu:
Với một số nguyên dương N cho trước, hãy tìm tất cả các số siêu nguyên tố
có N chữ số.
Dữ liệu vào: Cho trong file văn bản SNT.INP có cấu trúc như sau:
- Dòng 1: Ghi số nguyên dương N (0< N <10).
Dữ liệu ra: Ghi ra file văn bản SNT.OUT theo cấu trúc:
- Dòng 1: Ghi số nguyên dương K, là lượng các số siêu nguyên tố tìm được.
- K dòng tiếp theo: Mỗi dòng ghi một số nguyên dương, là giá trị của số siêu
nguyên tố tìm được.
Ví dụ:
SNT.INP SNT.OUT
23 29
Trang 231 37 53 59 71 73 79
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ụ:
8 6 4 7 8 5 1 2 3
7 5 6 8 4 1 3 2
Giới hạn thời gian thực hiện chương trỡnh khụng quỏ 1 giõy đối với mọi trường hợp của dữ liệu vào
Sở 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 2007-2008
SBD : môn: tin học – vòng i vòng iI
Đề chính thức Thời gian 180 phỳt, khụng kể thời gian giao đề
ĐỀ RA
Trang 3Cho 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
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 ụ:
5
2 1 4 4 1
2 3 4 4 1
N
Cõu 3: (4.0 điểm) Nỳt cha chung gần nhất ANCES.PAS
Cõy là một cấu trỳc dữ liệu cú nhiều ứng dụng trong tin học Vớ dụ ta cú cõy với 16 nỳt, cỏc nỳt được đỏnh số từ 1 đến 16, nỳt 8 là gốc, như hỡnh sau:
Nỳt x được gọi là nỳt cha của y, nếu tồn tại một đường dẫn từ gốc tới y đi qua x Ở cõy đang xột, nỳt 4 là nỳt cha của nỳt 16, nỳt 10 cũng là nỳt cha của 16
Một nỳt đồng thời là nỳt cha của chớnh mỡnh Ở cõy đang xột, cỏc nỳt 8, 4,
10 và 16 là nỳt cha của 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
Trang 4Nú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ụ:
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
Trang 5Hớ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: Sắp dóy tăng dần
{OK}
const fi='sap.inp';
fo='sap.out';
var n:integer;
xl:array[1 32000] of boolean;
f:text;
procedure nhap;
Trang 6var 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];
Trang 7end;
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]]<C[a[i]-1]) then 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;
Trang 8Assign(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: Cắt 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
Trang 9Assign(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
time:=meml[0:$46c];
nhap;
Xuli;
xuat;
writeln('Thoi gian ',(meml[0:$46c]-time)/18.21:8:4);
readln;
End
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
Trang 10dem:=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