- 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. + Giám khảo phải tạo bộ test.[r]
(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 liệu vào, tính tốn kết Thực chương trình học sinh so sánh kết
- Giám khảo sử dụng chương trình gợi ý để tính tốn kết của liệu vào
- Đối với câu 1: Giám khảo phải tạo 06 test, chương trình học sinh
đúng 01 test giám khảo cho 0.5 điểm
- Đối với câu 2:
+ Giám khảo phải tạo 06 test, chương trình học sinh 01 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 04 test, chương trình học sinh 01 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 04 test, chương trình học sinh 01 test thì giám khảo cho 0.5 điểm
+ Giám khảo phải tạo test - 2 test: M, N ≤ 20 S ≤ 20
- 2 test: M ≤ 20; N ≤ 50000 S ≤ 1000000 M ≤ 50000; N ≤ 20 S ≤ 1000000
II CHƯƠNG TRÌNH GỢI Ý
Câu (3.0 điểm): Độ cao 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 <> 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
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 Write(f,K[i],' '); Close(f);
End; BEGIN
Read_Data; Process; Write_Data; END
Câu (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 1; i,j,d,m,n: integer;
procedure doc; begin
assign(f,fi); reset(f); read(f, m,n); for i:=1 to m for j:=1 to n read(f,a[i,j]); close(f);
end;
procedure xl;
begin for i:= to m d:=0;
(3)for j:= to n
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 (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 begin
for j:=1 to n 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 for r:=0 to m if s=1 then begin
l[r,1]:=a[r,1]; u[r,1]:=r; end
else begin
(4)for k:=0 to r 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 if max<l[i,n] then begin
max:=l[i,n]; k:=i;
end;
writeln(f,max); dem:=0; while n>0
begin
inc(dem);
que[dem]:=u[k,n]; k:=tr[k,n];
n:=n-1; end;
for i:=dem downto write(f,que[i],' '); close(f);
end; begin doc; xuli; end
Câu (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 begin
for j:=1 to n begin
(5)end; readln(f); end;
for i:=1 to s 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 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);