Phương pháp: - Giám khảo tạo 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 t
Trang 1Së GD&§T kú thi CHäN häc sinh giái cÊp tØnh líp 12 THPT Qu¶ng b×nh n¨m häc 2012 - 2013
M«n thi: tin häc - Vßng i
híng dÉn chÊm
I Phương pháp:
- Giám khảo tạo 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 toán kết quả của dữ liệu vào.
- Chương trình học sinh đúng một bộ test, giám khảo cho 0,5 điểm Như vậy, nếu một câu có 3 điểm thì giám khảo phải tạo 6 bộ test.
- Với mỗi câu, giám khảo phải tạo được ít nhất một bộ test có không gian dữ liệu lớn.
- Riêng Câu 1, thứ tự sắp xếp của HS có thể khác với đáp án Nếu kết quả của học sinh khác đáp án nhưng 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: (3,0 điểm) Sắp xếp xâu
program sap;
const f1='sapxau.inp';
f2='sapxau.out';
type mm=array[1 20] of string;
var a:mm;
s,st,tg:string;
d:integer;
f:text;
procedure doc;
begin
assign(f,f1);
reset(f);
readln(f,s);
close(f);
end;
procedure xl;
var x,j,i:integer;
n:byte;
begin
n:=length(s);
while s[1]=' ' do delete(s,1,1);
while s[n]=' ' do delete(s,n,1);
x:=pos(' ',s);
while x>0 do
begin
delete(s,x,1);
x:=pos(' ',s);
end;
s:=s+' ';
for i:=1 to 20 do a[i]:='';
i:=0;
while s<>'' do
begin
i:=i+1;
a[i]:=copy(s,1,pos(' ',s)-1);
delete(s,1,pos(' ',s));
end;
d:=i;
{ for j:=1 to d do
begin
i:=1;st:='';
while (s[i]<>' ')do
Trang 2begin
st:=st+s[i];
i:=i+1;
end;
delete(s,1,i);
a[j]:=a[j]+st;
end;}
for i:=1 to d-1 do
for j:=i+1 to d do
if length(a[i])>length(a[j]) then
begin
tg:=a[i];a[i]:=a[j];a[j]:=tg;
end;
end;
procedure xuat;
var i:integer;
begin
assign(f,f2);
rewrite(f);
for i:=1 to d do write(f,a[i],' ');
close(f);
end;
begin
doc;xl;xuat;
end
Câu 2: (3,5 điểm) Dãy con liên tiếp
program day_con;
const fi='daycon.inp';
f0='daycon.out';
type mm=array[1 10000] of integer;
var f:text;
a:mm;
n,m:integer;
procedure doc;
var i:integer ;
begin
assign(f,fi);
reset(f);
read(f,n,m);
for i:=1 to n do read(f,a[i]);
close(f);
end;
procedure xuli;
var i,j,l:integer;
t:longint;
kt:boolean;
begin
assign(f,f0);
rewrite(f);
kt:=false;
for i:=1 to n do
begin
j:=i;
t:=0;
while (t<m )and (j<=n) do
begin
t:=t+a[j];
j:=j+1;
end;
if t=m then
begin
kt:=true;
for l:=i to j-1 do write(f,a[l],' ');
writeln(f);
Trang 3end;
end;
if kt=false then write(f,0);
close(f);
end;
begin
doc; xuli;
end
Câu 3: (3,5 điểm) Đếm nhóm bạn trong Hội trại
const fi='nhomban.inp';
fo='nhomban.out';
maxn=100;
type mhc=array[1 maxn,1 maxn] of byte;
mmc=array[1 maxn] of byte;
var a:mhc;
b:mmc;
n,stp:integer;
f:text;
Procedure doc;
var i,j:integer;
Begin
assign(f,fi);
reset(f);
readln(f,n);
for i:=1 to n do
begin
for j:=1 to n do read(f,a[i,j]);
readln(f);
end;
close(f);
End;
Procedure xl;
var i,j,k:integer;
Begin
for i:=1 to n do b[i]:=n+1;
stp:=0;
for k:=1 to n do
begin
if b[k]=n+1 then
begin
stp:=stp+1;
b[k]:=stp;
end;
for i:=1 to n do
begin
if b[i] = stp then
for j:=1 to n do
if (a[i,j]=1) and (b[j]=n+1) then b[j]:=stp;
end;
end;
end;
procedure xuatstp;
begin
assign(f,fo);
rewrite(f);
writeln(f,stp);
close(f);
end;
Begin
doc; xl;
xuatstp;
End