1. Trang chủ
  2. » Giáo án - Bài giảng

Bài soạn Đề_ĐA_HSG Tỉnh ĐăkLăk_V2_2010

7 238 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 7
Dung lượng 75,5 KB

Nội dung

S GIÁO D C VÀ ÀO Ở Ụ Đ T OẠ T NH K L KỈ ĐẮ Ắ CHÍNH TH CĐỀ Ứ K THI CH N I TUY N H C SINH GI I DỲ Ọ ĐỘ Ể Ọ Ỏ Ự THI QU C GIA - N m h c 2010 - 2011Ố ă ọ Môn: TIN H C Ọ Th i gian làm bài: 180 phút (không k th iờ ể ờ gian giao đ )ề Ngày thi: 30/11/2010 ( thi g m 02 trang)Đề ồ Bài File bài làm D li uữ ệ vào K t quế ả Bài 1: Số hình chữ nhật trên lưới Bai1.pas HCN.INP HCN.OUT Bài 2: Di chuyển từ trái sang phải Bai2.pas Dichuyen.inp Dichuyen.out Bài 1(10,0 điểm) - Số hình chữ nhật trên lưới. Trên một tờ giấy kẻ ô vuông, kích thước N x N người ta tạo ra một số hình chữ nhật bằng cách định vị một số ô liên tiếp kề nhau, các hình chữ nhật này từng đôi một không giao nhau, không liền kề theo phép kề đỉnh. Cho bảng A (N x N), giá trị phần tử của bảng được xác định như sau: A[i,j] = 1 nếu ô tương ứng trên tờ giấy thuộc một hình chữ nhật nào đấy. A[i,j] = 0 nếu ô tương ứng trên tờ giấy không thuộc một hình chữ nhật nào cả. Hãy tìm số lượng các hình chữ nhật và các tọa độ đỉnh trái trên, phải dưới của mỗi hình chữ nhật trong bảng. Dữ liệu vào lấy từ file văn bản “HCN.INP” dòng đầu ghi số N. N dòng tiếp theo mỗi dòng là xâu nhị phân độ dài N, giá trị 1 nếu ô tương ứng thuộc một hình chữ nhật, giá trị 0 nếu ô tương ứng không thuộc một hình chữ nhật nào cả. Kết quả ghi ra file văn bản “HCN.OUT” theo cấu trúc: - Dòng đầu ghi số M là số hình chữ nhật có trong bảng. - M dòng tiếp theo mỗi dòng ghi 4 số p, q, r, s với ý nghĩa: cặp số p, q là tọa độ đỉnh trái trên, cặp số r, s là tọa độ đỉnh phải dưới của một hình chữ nhật trong M hình chữ nhật có trên bảng. Ví d :ụ HCN.INP 7 1110011 1110011 0111000 0111011 0000011 1111011 1111000 HCN.OUT 5 1 1 2 3 1 6 2 7 3 2 4 4 4 6 6 7 6 1 7 4 Trang 1 Bài 2(10,0 điểm) - Di chuyển từ trái sang phải. Cho hình chữ nhật M x N ô vuông, mỗi ô chứa một số nguyên. Có thể di chuyển từ một ô sang ô thuộc cột bên phải cùng dòng hoặc chênh lệch một dòng. Tìm cách di chuyển từ một ô nào đó thuộc cột 1 đến một ô nào đó thuộc cột N sao cho tổng các số nguyên chứa trong các ô đi qua là nhỏ nhất. Dữ liệu vào lấy từ file văn bản “Dichuyen.inp” dòng đầu là 2 số nguyên dương M, N. M dòng tiếp theo mỗi dòng ghi N số nguyên của hình chữ nhật. Kết quả ghi ra file văn bản “Dichuyen.out” gồm 2 dòng: - Dòng thứ nhất ghi tổng các số nguyên chứa trong các ô đi qua. - Dòng thứ hai ghi N số là chỉ số dòng của các ô đi qua từ cột 1 đến cột N. Ví dụ: DICHUYEN.INP 2 3 5 2 3 4 3 2 DICHUYEN.OUT 8 2 1 2 ------------------ H T --------------------Ế • Thí sinh không đ c s d ng tài li u.ượ ử ụ ệ • Giám th không gi i thích gì thêm.ị ả H và tên thí sinh………………… .………………… S báoọ ố danh………… . Trang 2 SỞ GIÁO DỤC VÀ ĐÀO TẠO KỲ THI CHỌN ĐỘI TUYỂN HỌC SINH GIỎI TỈNH NĂM HỌC 2010-201 ĐẮK LẮK MÔN : TIN HỌC 12 - THPT ĐÁP ÁN VÀ HƯỚNG DẪN CHẤM I. Phần chương trình nguồn Bài 1: Var f:text; a: array[1 100,1 100] of 0 1; td: array[1 4,1 100] of byte; n, dem: byte; procedure docfile; var i, j : byte; ch: char; begin fillchar(a,sizeof(a),0); dem:=0; assign(f,'hcn.inp'); reset(f); readln(f,n); for i:=1 to n do begin for j:=1 to n do begin read(f,ch); if ch= '1' then a[i,j]:= 1; end; readln(f); end; close(f); end; procedure tim; var i,j,k,l,d,c:byte; begin for i:=1 to n do for j:=1 to n do if a[i,j]=1 then begin inc(dem); td[1,dem]:=i; td[2,dem]:=j; Trang 3 d:=i; c:=j; while (d<n) and (a[d+1,j]=1) do inc(d); while (c<n) and (a[i,c+1]=1) do inc(c); td[3,dem]:=d; td[4,dem]:=c; for k:=i to d do for l:=j to c do a[k,l]:=0; end; end; procedure vietfile; var i:byte; begin assign(f,'hcn.out'); rewrite(f); writeln(f,dem); for i:=1 to dem do writeln(f,td[1,i],' ',td[2,i],' ',td[3,i],' ',td[4,i]); close(f); end; BEGIN docfile; tim; vietfile; END. Bài 2: uses crt; const maxmn = 100; fi = 'bt.inp'; fo = 'bt.out'; var a,t :array[0 maxmn,0 maxmn] of integer; kq :array[1 maxmn] of byte; m,n :byte; procedure doc_file; var f :text; i,j:byte; begin assign(f,fi); reset(f); readln(f,m,n); for i:=1 to m do begin for j:=1 to n do read(f,a[i,j]); readln(f); end; close(f); end; function min(i,j:byte):byte; var p: integer; d: byte; begin Trang 4 p:=a[i-1,j-1]; d:=i-1; if a[i,j-1]< p then begin p:=a[i,j-1]; d:=i; end; if a[i+1,j-1]< p then begin p:=a[i+1,j-1]; d:=i+1; end; min:=d; end; procedure tao_nhan; var i,j,d : byte; begin for j:= 0 to n do a[0,j]:= maxint; for j:= 0 to n do a[m+1,j]:=maxint; fillchar(t,sizeof(t),0); for j:=2 to n do for i:=1 to m do begin d := min(i,j); a[i,j]:= a[d,j-1]+a[i,j]; t[i,j]:=d; end; end; procedure tim_duong; var i,j,d:byte; p :integer; f :text; begin p:=maxint; for i:=1 to m do if a[i,n]< p then begin d:=i; p:=a[1,n]; end; j:=n; i:=d; kq[j]:=d; assign(f,fo); rewrite(f); writeln(f,a[i,j]); while j>0 do begin i:=t[i,j]; Trang 5 j:=j-1; kq[j]:=i; end; for j:=1 to n do write(f,kq[j],' '); close(f); end; BEGIN doc_file; tao_nhan; tim_duong; END. II. Test chấm Bài 1: Test 1 HCN.INP 7 1110011 1110011 0111000 0111011 0000011 1111011 1111000 Test 2 5 11100 11100 01110 01110 00000 HCN.OUT 5 1 1 2 3 1 6 2 7 3 2 4 4 4 6 6 7 6 1 7 4 2 1 1 2 3 3 2 4 4 Bài 2: Test 1: DICHUYEN.INP 2 3 5 2 3 4 3 2 Test 2: 3 4 5 2 3 1 4 3 2 0 1 3 6 8 Test 3: 4 5 5 2 3 1 -3 DICHUYEN.OUT 8 2 1 2 6 3 2 2 2 3 Trang 6 4 3 2 0 1 1 3 6 8 -2 1 2 3 4 5 Test 4: 5 6 5 2 3 4 -3 1 4 3 2 9 1 0 -6 3 8 9 1 2 0 2 9 0 5 7 1 2 8 5 0 2 3 2 2 2 1 0 3 2 2 1 1 2 ---- Hết ---- Trang 7 . thi: 30/11 /2010 ( thi g m 02 trang )Đề ồ Bài File bài làm D li uữ ệ vào K t quế ả Bài 1: Số hình chữ nhật trên lưới Bai1.pas HCN.INP HCN.OUT Bài 2: Di chuyển. ĐẮ Ắ CHÍNH TH CĐỀ Ứ K THI CH N I TUY N H C SINH GI I DỲ Ọ ĐỘ Ể Ọ Ỏ Ự THI QU C GIA - N m h c 2010 - 2011Ố ă ọ Môn: TIN H C Ọ Th i gian làm bài: 180 phút

Ngày đăng: 04/12/2013, 12:11

w