1. Trang chủ
  2. » Kinh Tế - Quản Lý

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

4 139 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 4
Dung lượng 378,59 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

- Nếu chương trình của học sinh đưa ra kết quả khác với đáp án của giám khảo nhưng vẫn đúng thì giám khảo cho điểm tối đa của bộ test đó.. - Với mỗi câu, giám khảo phải tạo ít nhất một [r]

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 11 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 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 hoặc 0,25 điểm

- Nếu chương trình của học sinh đưa ra kết quả khác với đáp án của giám khảo nhưng vẫn đúng thì giám khảo cho điểm tối đa của bộ test đó

- Với mỗi câu, giám khảo phải tạo ít nhất một bộ test có dữ liệu lớn

II- Chương trình gợi ý:

const

fi='unzip.inp';

fo='unzip.out';

var st,xso:string;

f,g:text;

i,j,k,n,code:integer;

begin

assign(f,fi);

assign(g,fo);

reset(f);

rewrite(g);

readln(f,st);

j:=1;

while j<=length(st) do

if st[j] in ['0' '9'] then

begin

i:=j;

xso:='';

while st[i] in ['0' '9'] do begin xso:=xso+st[i]; i:=i+1; end;

val(xso,n,code);

for k:=1 to n do write(g,st[i]);

j:=i+1

end

else begin write(g,st[j]); j:=j+1; end;

close(f); close(g);

end

program route;

const fi='route.inp';

fo='route.out';

type mang=array[1 30002] of integer;

var a:mang;

i,j,l,x,b,n:integer;

f,g:text;

kt:boolean;

begin

Trang 2

assign(f,fi);

reset(f);

assign(g,fo);

rewrite(g);

readln(f,n);

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

b:=0;l:=0;x:=0;i:=1;

a[n+1]:=a[1];

while i<=n do

begin

kt:=true;

if (a[i]<a[i+1]) and kt then

begin

inc(l);

while (a[i+1]<a[i+2]) and (i<=n-1) do i:=i+1;

kt:=false;

end;

if (a[i]>a[i+1]) and kt then

begin

inc(x);

while (a[i+1]>a[i+2]) and (i<=n-1) do inc(i);

kt:=false;

end;

if (a[i]=a[i+1]) and kt then

begin

inc(b);

while (a[i+1]=a[i+2]) and (i<=n-1) do inc(i);

kt:=false;

end;

inc(i);

end;

write(g,b,' ',l,' ',x);

close(f);

close(g);

end

const fi='CONNECT.INP';

fo='CONNECT.OUT';

var f:text;

a,c:array[1 100,1 100] of integer;

d,tr,kq:array[1 100] of integer;

nap:array[1 100] of boolean;

m,s,t,i,j,x,y,z,max:integer;

procedure doc;

var i:integer;

begin

assign(f,fi);

reset(f);

readln(f,m,s,t);

max:=0;

for i:=1 to m do

begin

readln(f,x,y,z);

a[x,z]:=y; a[z,x]:=y;

if x>max then max:=x;

if z>max then max:=z;

end;

end;

function min:integer;

var u,i,tam:integer;

begin

tam:=2001;

Trang 3

u:=0;

for i:=1 to max do

if (nap[i]=false) and (d[i]<tam) then

begin

tam:=d[i];

u:=i;

end;

min:=u;

end;

procedure xuly(s:integer);

var i,j:integer;

begin

for i:=1 to max do

for j:=1 to max do

if a[i,j]<>0 then c[i,j]:=a[i,j]

else c[i,j]:=2001;

for i:=1 to max do

begin

d[i]:=c[s,i];

nap[i]:=false;

tr[i]:=s;

end;

d[s]:=0;

repeat

i:=min;

if i=0 then break;

nap[i]:=true;

for j:=1 to max do

if (nap[j]=false) and (d[j]>d[i]+c[i,j]) then

begin

tr[j]:=i;

d[j]:=d[i]+c[i,j];

end;

until false;

end;

procedure truyvet(t:integer);

var i,dem:integer;

begin

assign(f,fo);

rewrite(f);

if d[t]=2001 then write(f,'NO')

else

begin

writeln(f,'YES');

i:=t;

dem:=1;

kq[1]:=t;

while i<>s do

begin

inc(dem);

kq[dem]:=tr[i];

i:=tr[i];

end;

writeln(f,d[t]); {For i:=dem downto 1 do write(f,kq[i],' ');} end;

close(f);

end;

begin

doc;

xuly(s);

truyvet(t);

end

Trang 4

Câu 4 (2.0 điểm): Dãy chia hết SIGN.PAS

const fi='sign.inp';

fo='sign.out';

var f:text;

a,c:array[-2 100]of longint;

b:array[-2 100000000]of longint;

tong,t,l,l1,k,n,i,j:longint;

begin

assign(f,fi);

reset(f);

tong:=0;

readln(f,n,k);

for i:= 1 to n do

begin

read(f,a[i]);

tong:=tong+a[i];

end;

close(f);

assign(f,fo);

rewrite(f);

b[0]:=-1;

t:=(tong-k) div 2;

l:=0; l1:=0;

for i:= 2 to n do

if l1=t then

break

else

begin

l:=l1;

for j:= 0 to l do

if (b[j]<>i) and(b[j]<>0)and(j+a[i]<=t)and(b[j+a[i]]=0) then begin

b[j+a[i]]:=i;

if (j+a[i]>l1) then

l1:=j+a[i];

end;

end;

while (t>0) and (((tong-2*t) mod k<>0)or(b[t]=0)) do

begin

t:=t-1;

end;

if (b[t]=0) or(t<1) then

writeln(f,0)

else

begin

write(f,1);

while b[t]>0 do

begin

c[b[t]]:=1;

t:=t-a[b[t]];

end;

for i:= 2 to n do

if c[i]=0 then

write(f,'+')

else

write(f,'-');

end;

close(f);

end

Ngày đăng: 23/02/2021, 19:21

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w