Tải bản đầy đủ (.pdf) (5 trang)

Đáp án HSG Tin học lớp 12 Quảng Bình 2017-2018 - Học Toàn Tập

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 (508.96 KB, 5 trang )

(1)

SỞ GD&ĐT QUẢNG BÌNH KỲ THI CHỌN HỌC SINH GIỎI CẤP TỈNH


NĂM HỌC 2017 - 2018



HƯỚNG DẪN CHẤM

LỚP 12 THPT


Môn thi: TIN HỌC



(Khóa thi ngày 22 tháng 03 năm 2018)



Thời gian làm bài: 180 phút (không kể thời gian giao đề)



I. PHƯƠNG PHÁP



- Giám khảo tạo bộ dữ liệu vào, tính tố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ốn kết quả


của dữ liệu vào.



- Đối với câu 1:

Giám khảo phải tạo được 06 bộ test, chương trình học sinh



đúng 01 bộ test giám khảo cho 0.5 điểm.



- Đối với câu 2:



+ Giám khảo phải tạo được 06 bộ test, chương trình học sinh đúng 01 bộ test


thì giám khảo cho 0.5 điểm.



- Đối với câu 3:



+ Giám khảo phải tạo được 04 bộ test, chương trình học sinh đúng 01 bộ test


thì giám khảo cho 0.5 điểm.




- Đối với câu 4:



+ Giám khảo phải tạo được 04 bộ test, chương trình học sinh đúng 01 bộ test


thì giám khảo cho 0.5 điểm.



+ Giám khảo phải tạo bộ test.


-

2 bộ test: M, N ≤ 20 và S ≤ 20



-

2 bộ test: M ≤ 20; N ≤ 50000 và S ≤ 1000000 hoặc M ≤ 50000; N ≤ 20 và


S ≤ 1000000.



II. CHƯƠNG TRÌNH GỢI Ý



Câu 1 (3.0 điểm): Độ cao của dãy số

HIGHT.PAS



{$R+}


Program Do_cao_cua_day_so;
Const fi='HIGHT.INp';
fo='HIGHT.OUT';
MaxN=32000;


Type mmcl=Array[0..MaxN] of Longint;
Var A:mmcl;


K:mmcl;
N:Longint;
Procedure Read_Data;
Var f:Text;



i:Longint;
Begin



(2)

Close(f);
End;


Function Sum(M:Longint):Longint;
Var d:Longint;


Begin
d:=0;


While M <> 0 do
Begin


d:=d+M mod 10;
M:=M div 10;
End;


Sum:=d;
End;


Procedure Process;
Var i,J,TG:Longint;
Begin


Fillchar(K,Sizeof(K),0);
For i:=1 to N do



K[i]:=Sum(A[i]);
End;


Procedure Write_Data;
Var f,g,h:Text;
tg, i,j:Longint;
Begin


Assign(f,fo);
ReWrite(f);


for i:=1 to n do
Write(f,K[i],' ');
Close(f);


End;
BEGIN


Read_Data;
Process;
Write_Data;
END.


Câu 2 (3.0 điểm): Chiến hạm

WARSHIP.PAS



const nm=32000;
fi='warship.inp';
fo='warship.out';
var f: text;



a:array[0..32000,0..251] of 0..1;
i,j,d,m,n: integer;


procedure doc;
begin


assign(f,fi);
reset(f);
read(f, m,n);
for i:=1 to m do
for j:=1 to n do
read(f,a[i,j]);
close(f);


end;


procedure xl;


begin for i:= 1 to m do
d:=0;



(3)

for j:= 1 to n do


if (a[i,j]=1) and (a[i-1,j]=0) and (a[i,j-1]=0) then
inc(d);


end;


procedure ghi;
begin



assign(f,fo);
rewrite(f);
write(f,d);
close(f);
end;


BEGIN
DOC;
XL;
GHI;
END.


Câu 3. (2,0 điểm) Gia công mỹ nghệ

PLAN.PAS



const fi='plan.inp';
fo='plan.out';


type mang=array[0..1000,0..1000]of longint;
mang1=array[0..1000]of longint;


var f:text;


a,l,u,tr:mang;
que:mang1;


m,n,i,j:longint;
procedure doc;


begin



assign(f,fi);
reset(f);


readln(f,m,n);
for i:=0 to m do
begin


for j:=1 to n do
read(f,a[i,j]);
readln(f);


end;
close(f);
end;


procedure xuli;


var dem,s,r,k,tr1,max,tam,kmax,lmax:longint;
begin


assign(f,fo);
rewrite(f);


for s:=1 to n do
for r:=0 to m do
if s=1 then
begin


l[r,1]:=a[r,1];


u[r,1]:=r;
end


else
begin



(4)

for k:=0 to r do
begin


tam:=a[k,s]+l[r-k,s-1];


if tam>lmax then begin lmax:=tam;tr1:=r-k;kmax:=k;end;
end;


l[r,s]:=lmax;u[r,s]:=kmax; tr[r,s]:=tr1;
end;


max:=0;k:=0;
for i:=0 to m do
if max<l[i,n] then
begin


max:=l[i,n];
k:=i;


end;


writeln(f,max); dem:=0;
while n>0 do



begin


inc(dem);


que[dem]:=u[k,n];
k:=tr[k,n];


n:=n-1;
end;


for i:=dem downto 1 do write(f,que[i],' ');
close(f);


end;
begin
doc;
xuli;
end

.



Câu 4 (2.0 điểm): Ma trận đèn Led

LED.PAS



const fi='led.inp';
fo='led.out';


type mang=array[0..2000000]of word;
var f:text;


id,col,led,col1,led1:mang;
n,m,i,j,dem,nn,s,x:longint;
procedure doc;



begin


assign(f,fi);
reset(f);


readln(f,m,n,s);
for i:=1 to m do
begin


for j:=1 to n do
begin



(5)

end;
readln(f);
end;


for i:=1 to s do
begin


read(f,x);


if x>m then begin x:=x-m;inc(col1[x]);end
else


inc(led1[x]);
end;


close(f);
end;



procedure xuli;
begin


assign(f,fo);
rewrite(f);
dem:=0;


for i:=1 to nn do
begin


id[i]:=(id[i]+col1[col[i]]+led1[led[i]]) mod 3;
if id[i]=0 then inc(dem);


end;


writeln(f,dem);
close(f);





×