SỞ GIÁO DỤC VÀ ĐÀO TẠO KỲ THI CHỌN HỌC SINH GIỎI TỈNH YÊNBÁI LỚP 12 THPT NĂM HỌC 2010- 2011 Môn thi: Tin học Thời gian: 180 phút (không kể thời gian giao đề) Ngày thi: 10-10-2010 Bài 1(6 điểm): Cho một số tự nhiên N (1<=N<=120), người ta phân tích số N thành các số tự nhiên s i (1<= s i <= N) có tổng bằng N. Ví dụ N=4 ta có 5 cách phân tích: Cách 1: 4 = 1+1 +1+1 Cách 2: 4 = 2 +1+1 Cách 3: 4= 2+2 Cách 4: 4= 3+1 Cách 5: 4= 4 Yêu cầu: Từ một số N cho trước, tìm số cách để phân tích như trên. Dữ liệu vào: Từ file PT.INP có chứa giá trị N (1<=N<=120). Kết quả ra: Ghi ra file PT.OUT chứa tổng số cách phân tích được. Ví dụ: PT.INP PT.OUT 4 5 Bài 2 (7 điểm): Để xây dựng một trường Đại học mới tại tỉnh A, UBND tỉnh đã đưa ra n địa điểm và đánh số từ 1 đến n, sau đó chọn ra 1 địa điểm X để xây dựng trường. Để tạo điều kiện cho sinh viên đến trường, người ta tiến hành làm mới 1 số tuyến đường sao cho đảm bảo các sinh viên đến trường đều đi qua đường mới xây dựng và tổng độ dài các quãng đường phải xây dựng mới là nhỏ nhất. Yêu cầu: Hãy tính ra m là tổng số độ dài các quãng đường phải xây mới. Dữ liệu vào: - Từ file XT.INP có dòng đầu là n, X, (0<n<=500, 0<X<=n), các dòng kế tiếp mỗi dòng ghi 3 số A, B, C (mỗi số cách nhau một kí tự trắng) cho biết khoảng cách từ điểm A đến điểm B là C, (0<C<32000). - Dữ liệu đảm bảo luôn có đường đi từ các điểm khác về điểm X đã chọn. Kết quả ra: Ghi ra file XT.OUT gồm 1 số m. Ví dụ: XT.INP XT.OUT 4 2 2 1 15 2 3 8 2 4 20 3 4 6 29 Bài 3 (7 điểm): Tại quốc gia T đã có n (n<100) tuyến đường được xây dựng giữa 2 thành phố A và B. Để quy hoạch và xây dựng mới lại các tuyến 1 ĐỀ CHÍNH THỨC (Đề thi có 02 trang) đường, Chính phủ ra quyết định cần phải phá huỷ các tuyến đường cắt nhau giữa 2 thành phố. Mỗi tuyến đường được hiển thị bởi 2 số a i và b i (1<= a i; b i <=10000, i=1 n); Trong đó: - a i , b i tương ứng là 2 điểm nằm trên 2 thành phố. - Hai tuyến đường p và q được gọi là cắt nhau khi a p <a q , b p >b q hoặc a p >a q , b p <b q (1<=p,q<=n). Yêu cầu: - Không còn 2 tuyến đường nào cắt nhau giữa 2 thành phố. - Số tuyến đường cần phá bỏ là ít nhất. Dữ liệu vào: File văn bản tên là PD.INP có cấu trúc như sau: - Dòng đầu tiên là số nguyên dương n. - n dòng tiếp theo mỗi dòng chứa 2 số a i ,b i là toạ độ tương ứng của n tuyến đường. Kết quả ra: Xuất ra file văn bản PD.OUT với 1 số duy nhất là số lượng tuyến đường cần phá. Ví dụ: PD.INP PD.OUT 4 4 3 6 8 7 8 7 1 2 HẾT . Họ và tên thí sinh: SBD Chữ ký của giám thị 1: . Chữ ký của giám thị 2 . (Giám thị không giải thích gì thêm) ĐÁP ÁN: Đề thi chính thức Môn: Tin học lớp 12 2 Bài 1: (6 điểm) program bt1; const fi='d:\bt1.txt'; fo='d:\bt1.out'; var a:array[1 120,0 120] of longint; n:byte; procedure input; var f:text; begin assign(f,fi); reset(f); readln(f,n); close(f); end; procedure pt; var i,j,t:byte; begin for i:=1 to n do for j:=1 to n do a[i,j]:=0; for i:=1 to n do a[i,0]:=1; for i:=1 to n do for j:=1 to n do if j<i then a[i,j]:=a[i-1,j] else for t:=1 to i do a[i,j]:=a[i,j]+a[t,j-t]; end; procedure output; var f:text; begin assign (f,fo); rewrite(f); writeln(f,a[n,n]); close(f); end; begin input; pt; output; end. Bài 2: (7 điểm) program bt2; const fi='D:\bt2.txt'; fo='D:\bt2.out'; nmax=100; vc=100; var a:array[1 nmax,1 nmax] of 0 100; d:array[1 nmax] of longint; t,dd:array[1 nmax] of word; f:text; i,j,n,x,y,m,s,dmin:word; tg,min:longint; procedure nhap; 3 begin assign(f,fi); reset(f); readln(f,n,s); for i:=1 to n do for j:=1 to n do a[i,j]:=vc; for i:=1 to n do a[i,i]:=0; while not(seekeof(f)) do begin readln(f,x,y,m); a[x,y]:=m; a[y,x]:=m; end; close(f); end; procedure dijstra; begin fillchar(dd,sizeof(dd),0);dd[s]:=1;t[s]:=s;d[s]:=0; for i:=1 to n do if i<>s then begin d[i]:=a[s,i];t[i]:=s; end; repeat min:=VC; for i:=1 to n do if (dd[i]=0) and (d[i]<min) then begin min:=d[i];dmin:=i; end; if min<>VC then begin dd[dmin]:=1; for i:=1 to n do if (dd[i]=0) then if d[i]>d[dmin]+a[dmin,i] then begin d[i]:=d[dmin]+a[dmin,i];t[i]:=dmin; end; end; until min=vc; end; procedure vietkq; begin assign(f,fo);rewrite(f); tg:=0; for i:=1 to n do if i<>s then tg:=tg+a[i,t[i]]; writeln(f,tg); close(f); end; begin nhap; dijstra; vietkq; end. Bài 3: (7 điểm) 4 program bt3; const fi='d:\pd.txt'; fo='d:\pd.out'; type diem=record x,y:integer; end; mdiem=array[1 100] of diem; var a,b:mdiem; c:array[0 100,0 100] of integer; n:byte; procedure docfile; var f:text; i:integer; t1,t2:integer; begin assign(f,fi); reset (f); readln(f,n); for i:=1 to n do begin readln(f,t1,t2); a[i].x:=t1; b[i].x:=t2; a[i].y:=i; b[i].y:=i; end; close(f); end; procedure sapxep(var d:mdiem); var tam:diem; i,j:byte; begin for i:=1 to n-1 do for j:=i+1 to n do if d[i].x>d[j].x then begin tam:=d[i]; d[i]:=d[j]; d[j]:=tam; end; end; function max(a,b:integer):integer; begin if a>b then max:=a else max:=b; end; procedure xuli; var i,j:byte; begin sapxep(a); sapxep(b); for i:=0 to n do begin 5 c[i,0]:=0; c[0,i]:=0; end; for i:=1 to n do for j:=1 to n do if a[i].y=b[j].y then c[i,j]:=max(c[i-1,j],c[i,j-1])+1 else c[i,j]:=max(c[i-1,j],c[i,j-1]); end; procedure ghifile; var f:text; begin assign(f,fo); rewrite(f); write(f,n-c[n,n]); close(f); end; begin docfile; xuli; ghifile; end. 6 . GIÁO DỤC VÀ ĐÀO TẠO KỲ THI CHỌN HỌC SINH GIỎI TỈNH YÊN BÁI LỚP 12 THPT NĂM HỌC 2010- 2011 Môn thi: Tin học Thời gian: 180 phút (không kể thời gian giao. vào: File văn bản tên là PD.INP có cấu trúc như sau: - Dòng đầu tiên là số nguyên dương n. - n dòng tiếp theo mỗi dòng chứa 2 số a i ,b i là toạ độ tương