Đăng ký Đăng nhập
Trang chủ Giáo dục - Đào tạo Trung học phổ thông Lớp 11 đề thi học sinh giỏi môn tin lớp 11...

Tài liệu đề thi học sinh giỏi môn tin lớp 11

.DOC
5
173
69

Mô tả:

§Ò thi häc sinh giái toµn tØnh líp 11 n¨m häc 2006-2007 C©u 1: (4 ®iÓm) Nút cha chung gần nhất ANCES.PAS Cây là một cấu trúc dữ liệu quen thuộc trong tin học. Ví dụ ta có cây với 16 nút như hình bên dưới. Các nút được đánh số từ 1 đến 16. Nút 8 là gốc. Nút x được gọi là nút cha của y, nếu tồn tại một đường dẫn từ gốc tới y đi qua x. Ví dụ, nút 4 là nút cha của nút 16, nút 10 cũng là nút cha của 16. Một nút đồng thời là nút cha của chính mình. Như vậy, các nút 8, 4, 10 và 16 là nút cha của 16. Nút x được gọi là nút cha chung của hai nút khác nhau y và z, nếu nó vừa là nút cha của y, vừa là nút cha của z. Ví dụ, các nút 8 và 4 đều là nút cha chung của các nút 7 và 16. Nút x được gọi là nút cha chung gần nhất của y và z, nếu nó là nút cha chung của hai nút này và trên đường dẫn từ x tới y không còn nút cha chung nào khác của y và z. Ở cây đang xét, 4 là nút cha chung gần nhất của 7 và 16. Yêu cầu: Hãy lập trình tìm nút cha chung gần nhất của hai nút khác nhau của một cây có N nút, các nút được đánh số từ 1 tới N. Dữ liệu vào: Cho trong file văn bản ANCES.INP: Dòng 1: Ghi số 2 nguyên N K, trong đó N là số nút của cây, K là nút gốc. Hai số ghi cách nhau bởi dấu cách. 2≤N≤10000. N-1 dòng tiếp theo: Mỗi dòng ghi 2 số nguyên là 2 nút liên tiếp của cây. Dòng cuối cùng: Ghi 2 số nguyên, là 2 nút cần tìm nút cha chung gần nhất. Dữ liệu ra: Ghi ra file văn bản ANCES.OUT, theo cấu trúc: Dòng 1: Ghi một số nguyên, là nút cha chung gần nhất tìm được. Ví dụ: ANCES.INP ANCES.OUT 16 8 4 1 14 85 10 16 59 46 84 4 10 1 13 6 15 10 11 67 10 2 16 3 81 16 12 16 7 C©u 2: (6 ®iÓm) §o¹n gèi dµi nhÊt DOANGOI.PAS Cho N ®o¹n th¼ng ®îc ®¸nh sè tõ 1 ®Õn N. Mçi ®o¹n th¼ng ®îc x¸c ®Þnh bëi gi¸ trÞ ®iÓm ®Çu a vµ gi¸ trÞ ®iÓm cuèi b trªn trôc sè (a<=b). Yªu cÇu: H·y x¸c ®Þnh mét tËp nhiÒu nhÊt c¸c ®o¹n th¼ng sao cho kh«ng cã hai ®o¹n th¼ng nµo ®«i mét giao nhau (kÓ c¶ hai ®Çu mót). D÷ liÖu vµo: Cho trong file DOANGOI.INP, theo cÊu tróc nh sau Dßng 1: Ghi sè nguyªn d¬ng N lµ sè ®o¹n th¼ng. (1 <= N <= 1000) N dßng tiÕp theo: Mçi dßng ghi 2 sè nguyªn a b, hai sè ghi c¸ch nhau mét dÊu c¸ch (-32767 <= a,b <= 32767). D÷ liÖu ra: Ghi ra file DOANGOI.OUT, theo cÊu tróc nh sau: Dßng 1: Ghi sè nguyªn d¬ng M lµ sè lîng lín nhÊt c¸c ®o¹n th¼ng t×m ®îc Dßng 2: Ghi chØ sè cña M ®o¹n th¼ng t×m ®îc theo thø tù t¨ng dÇn cña täa ®é ®iÓm ®Çu. VÝ dô DOANGOI.INP 3 3 9 1 2 5 10 2 2 DOANGOI.OUT 1 Híng dÉn chÊm thi häc sinh giái toµn tØnh líp 11 n¨m häc 2006-2007 I/ Ph¬ng ph¸p chung - Gi¸m kh¶o t¹o c¸c bé d÷ liÖu vµo, tÝnh to¸n kÕt qu¶. Ch¹y ch¬ng tr×nh cña häc sinh vµ so s¸nh kÕt qu¶. Trong trêng hîp bµi to¸n cã nhiÒu kÕt qu¶ ®óng, kÕt qu¶ cña häc sinh kh¸c ®¸p ¸n nhng vÉn dóng th× gi¸m kh¶o vÉn cho ®iÓm tèi ®a. - Gi¸m kh¶o cã thÓ sö dông ch¬ng tr×nh mÉu ®Ó tÝnh kÕt qu¶ cña d÷ liÖu vµo. - Ch¬ng tr×nh häc sinh ch¹y ®óng mçi bé test, gi¸m kh¶o cho 0.5 ®iÓm. Nh vËy, nÕu c©u hái cã 3 ®iÓm th× gi¸m kh¶o ph¶i t¹o ®îc 6 bé test. - NÕu ch¬ng tr×nh ch¹y sai test nµo th× gi¸m kh¶o cho 0 ®iÓm ®èi víi test ®ã. II/ Ch¬ng tr×nh mÉu ANCES.PAS const fi='ances.in2'; fo='ances.ou2'; type mmc=array[1..10000] of word; var tr,a,b:mmc; f:text; n,k,y,z,v:word; procedure nhap; var i:word; begin assign(f,fi); reset(f); readln(f,n,k); tr[k]:=k; for i:=1 to n-1 do begin readln(f,y,z); tr[z]:=y; end; readln(f,y,z); close(f); end; procedure xuly; var d1,d2,i,j:word; begin d1:=0; d2:=0; repeat inc(d2); z:=tr[z]; b[d2]:=z; until z=k; repeat INC(D1); y:=tr[y]; a[d1]:=y; for i:=1 to d2 do if b[i]=a[d1] then begin v:=a[d1];y:=k;break; end; until y=k; end; procedure xuat; begin assign(f,fo); rewrite(f); writeln(f,v); close(f); end; begin nhap;xuly;xuat; end. DOANGOI.PAS Program CAU1H; Const fi='doangoi.in0'; fo='doangoi.ou0'; Type m1c=array[0..1000] of integer; Var qh,d,c,t,cs,k:m1c; n,max,l:integer; Procedure Nhap; var f:text; i:integer; begin assign(f,fi); reset(f); readln(f,n); for i:=1 to n do readln(f,d[i],c[i]); close(f); end; Procedure KhoiTao; var i:integer; begin for i:=1 to n do qh[i]:=1; fillchar(t,sizeof(t),0); for i:=1 to n do cs[i]:=i; end; Procedure hv(var x,y:integer); var t:integer; begin t:=x;x:=y;y:=t; end; Procedure SapXep; var i,j:integer; begin for i:=1 to n-1 do for j:=i+1 to n do if d[i]>d[j] then begin hv(d[i],d[j]); hv(c[i],c[j]); hv(cs[i],cs[j]); end; end; {!} Procedure XuLy; var i,j:integer; begin for i:=2 to n do for j:=1 to i-1 do if (c[j] - Xem thêm -