Kỳ thi lập đội tuyển học sinh giỏi quốc gia năm học 2013-2014 môn : tin học 12
Bạn đang xem nội dung tài liệu Kỳ thi lập đội tuyển học sinh giỏi quốc gia năm học 2013-2014 môn : tin học 12, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
SỞ GIÁO DỤC & ĐÀO TẠO KỲ THI LẬP ĐỘI TUYỂN HSG QUỐC GIA NĂM HỌC 2013-2014 ĐẮK LẮK MÔN : TIN HỌC 12 - THPT ĐÁP ÁN VÀ HƯỚNG DẪN CHẤM VÒNG 2 I. Phần chương trình nguồn Bài 1: program biendoixau; {$B-,Q+,R+} {$M 65500,0,655360} const maxN = 20; fi = 'BAI1.INP' ; fo = 'BAI1.OUT'; bd: array[1..9] of string[2]= ('aa','ab','ac','ba','bb', 'bc','ca','cb','cc'); type sN= string[maxN]; s9= string[9]; mang= array[1..maxN] of byte; var a, vt: mang; m,n: byte; u: sN; x: s9; w: char; f: text; procedure khoitao; var i:byte; begin assign(f,fi); reset(f); readln(f,n); u:= ''; x:= ''; m:= n-1; for i:=1 to n do begin readln(f,w); u:=u+w; end; for i:=1 to 9 do begin readln(f,w); x:=x+w; end; read(f,w); close(f); end; procedure check; var t,i,kt: byte; s:sN; begin s:= u; for i:=1 to m do begin t:= pos(bd[a[i]],s); if t = 0 then exit; vt[i]:= t; delete(s,t,2); insert(x[a[i]],s,t); end; if pos(w,s) > 0 then begin writeln(f,m); for i:= 1 to m do writeln(f,a[i],' ',vt[i], ' ',vt[i]+1); close(f);halt; end; end; procedure tim(i:byte); var j:byte; begin if i>m then check else for j:=1 to 9 do begin a[i]:= j; tim(i+1); end; end; procedure xuly; begin assign(f,fo); rewrite(f); tim(1); write(f,0); close(f); end; BEGIN khoitao; xuly; END. BÀI 2: program doico; const tfi = 'BAI2.INP'; tfo = 'BAI2.OUT'; maxN = 1000; var fi, fo : text; N : integer; dd,x,a,b,csA,csB : array[1..maxN] of integer; DiemMax : integer; procedure Docdl; var i: integer; begin assign(fi,tfi); reset(fi); readln(fi,N); for i:=1 to N do read(fi,a[i],b[i]); close(fi); end; procedure Doi(var u,v: integer); var w: integer; begin w:=u; u:=v; v:=w; end; procedure SortA(k,l: integer); var i,j,mid: integer; begin mid:=a[(k+l) div 2]; i:=k; j:=l; repeat while a[i]<mid do inc(i); while a[j]>mid do dec(j); if i<=j then begin Doi(a[i],a[j]); Doi(csA[i],csA[j]); inc(i); dec(j); end; until i>j; if j>k then SortA(k,j); if i<l then SortA(i,l); end; procedure SapxepA; var i: integer; begin for i:=1 to N do csA[i]:=i; SortA(1,N); end; procedure SortB(k,l: integer); var i,j,mid: integer; begin mid:=b[(k+l) div 2]; i:=k; j:=l; repeat while b[i]>mid do inc(i); while b[j]<mid do dec(j); if i<=j then begin Doi(b[i],b[j]); Doi(csB[i],csB[j]); inc(i); dec(j); end; until i>j; if j>k then SortB(k,j); if i<l then SortB(i,l); end; procedure SapXepB; var i: integer; begin for i:=1 to N do csB[i]:=i; SortB(1,n); end; function TimA(r: integer): integer; var i: integer; begin for i:=n downto 1 do if (dd[csA[i]]=0) and (a[i]<r) then begin TimA:=i; exit; end; for i:=n downto 1 do if (dd[csA[i]]=0) and (a[i]=r) then begin TimA:=i; exit; end; TimA:=0; end; procedure Ghep; var j,limit,i,k: integer; begin fillchar(dd,sizeof(dd),0); fillchar(x,sizeof(x),0); i:=1; DiemMax:=0; limit:=n; repeat k:=TimA(b[i]); if k>0 then begin x[csA[k]]:=csB[i]; dd[csA[k]]:=1; if b[i]>a[k] then inc(DiemMax,2) else inc(DiemMax,1); limit:=k-1; inc(i); end; until k=0; for j:=i to N do begin repeat inc(k) until dd[k]=0; x[k]:=csB[j]; end; end; procedure inkq; var i: integer; begin assign(fo,tfo); rewrite(fo); writeln(fo,diemMax); for i:=1 to N do writeln(fo,x[i]); close(fo); end; BEGIN Docdl; SapXepA; SapXepB; Ghep; Inkq; END. II. Hướng dẫn chấm. Bài 1: 5 Test, mỗi test đúng cho 2 điểm Bài 2: 5 Test, mỗi test đúng cho 2 điểm Chú ý: Kết quả có thể có nhiều phương án khác nhau do đó yêu cầu giám khảo xem xét kỹ khi chấm bài. ---- Hết ----
File đính kèm:
- Dap an chon doi tuyen hsg 2013 tin_v2 .doc