Đề thi học sinh giỏi lớp 12 THPT tỉnh Ninh Bình năm 2012 - 2013 (Lần 1) môn tin

16 682 6
Đề thi học sinh giỏi lớp 12 THPT tỉnh Ninh Bình năm 2012 - 2013 (Lần 1) môn tin

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

SỞ GD&ĐT NINH BÌNH ĐỀ THI CHỌN HỌC SINH GIỎI LỚP 12 THPT Kỳ thi thứ nhất - Năm học 2012 – 2013 MÔN: TIN HỌC Ngày thi: 09/10/2012 (Thời gian làm bài:180 phút ) Đề thi gồm 04 câu, trong 02 trang Tổng quan đề thi: Câu Tên file bài làm Tên file Input Tên file Otput Thời gian chạy 1 NUMBER.PAS NUMBER.INP NUMBER.OUT 1 giây/test 2 GOMBI.PAS GOMBI.INP GOMBI.OUT 1 giây/test 3 TRIANGLE.PAS TRIANGLE.INP TRIANGLE.OUT 2 giây/test 4 PASCAL.PAS PASCAL.INP PASCAL.OUT 1 giây/test Ghi chú: Thí sinh phải đặt tên file bài làm, file Input, file Output theo quy định như trên. Câu 1: Chữ số thứ N. Khi viết các số tự nhiên tăng dần từ 1, 2, 3,… liên tiếp nhau, ta nhận được một dãy các chữ số thập phân vô hạn, đoạn đầu tiên của dãy sẽ là: 1234567891011121314151617181920 Yêu cầu: Hãy tìm chữ số thứ N của dãy số vô hạn trên. Dữ liệu: Cho trong file NUMBER.INP gồm một nguyên dương N (N < 10 6 ). Kết quả: Ghi kết quả ra file NUMBER.OUT. Ví dụ: NUMBER.OUT NUMBER.OUT Giải thích kết quả 21 5 Chữ số thứ 21 trong dãy là chữ số 5 Câu 2: Gom bi. Có N cái hộp đánh số từ 1 tới N và N viên bi cũng đánh số từ 1 tới N. Ban đầu bi số i đặt trong hộp đánh số i (i = 1 N). Với một cặp số nguyên (u, v) cho trước, bạn phải thực hiện thao tác chuyển tất cả các bi cùng hộp với bi có số u vào hộp chứa bi số v. Yêu cầu: Cho số N và danh sách M thao tác cần phải thực hiện. Hãy xác định số lượng bi lớn nhất trong một hộp sau khi đã thực hiện đủ M thao tác chuyển bi. Dữ liệu: Cho trong file GOMBI.INP • Dòng 1 là hai số N, M (2 ≤ N ≤ 500; 1 ≤ M ≤ 1000). • M dòng tiếp theo, mỗi dòng chứa hai số nguyên u v thể hiện một thao tác cần thực hiện Kết quả: Ghi ra file GOMBI.OUT một số nguyên là số lượng bi trong hộp có nhiều bi nhất sau khi thực hiện các thao tác. Ví dụ: GOMBI.INP GOMBI.OUT Giải thích: Các hộp có bi sau mỗi lần chuyển. 7 4 1 3 2 6 1 6 1 2 4 Ban đầu: (1) (2) (3) (4) (5) (6) (7) Chuyển 1 3: (2) (1 3) (4) (5) (6) (7) Chuyển 2 6: (1 3) (4) (5) (2 6) (7) Chuyển 1 6: (4) (5) (1 2 3 6) (7) Chuyển 1 2: (4) (5) (1 2 3 6) (7) Câu 3: Tam giác cân. Cho hệ trục tọa độ Oxy, trên đó có đánh dấu n điểm (3 ≤ n ≤ 1500). Điểm thứ i có tọa độ (x i , y i ) (i = 1 ÷ n), các tọa độ là số nguyên có giá trị tuyệt đối không vượt quá 10 9 . Yêu cầu: Xác định số tam giác cân có ba đỉnh là ba điểm trong số n điểm đã cho. Dữ liệu: Cho trong file TRIANGLE.INP: • Dòng đầu tiên chứa số nguyên n. • Dòng thứ i trong n dòng sau chứa 2 số nguyên x i và y i . Kết quả: Ghi ra file TRIANGLE.OUT số tam giác cân tìm được. ĐỀ THI CHÍNH THỨC Ví dụ: TRIANGLE.INP TRIANGLE.OUT 4 0 0 1 1 1 0 0 1 4 Chú ý: Trong 60% số test có n < 200. Câu 3(6 điểm): Tam giác PASCAL. Tam giác Pascal là một cách sắp xếp các hệ số khi khai triển nhị thức Newton vào một hình có dạng tam giác theo từng hàng, các hàng được đánh số bắt đầu từ 0, hàng thứ n (n ≥ 0) của tam giác bao gồm các hệ số trong khai triển của (x + y) n viết lần lượt từ trái sang phải. Dòng 0: (x + y) 0 = 1 Dòng 1: (x + y) 1 = 1.x + 1.y Dòng 2: (x + y) 2 = 1.x 2 + 2.xy + 1.y 2 Dòng 3: (x + y) 3 = 1.x 3 + 3.x 2 y + 3.xy 2 + 1.y 3 … Dưới đây các hàng từ 0 đến 16 của Tam giác Pascal: Yêu cầu: Cho số tự nhiên n. Hãy tính số lượng số hạng là số lẻ trên dòng thứ n của tam giác Pascal. Dữ liệu: Cho trong file PASCAL.INP cấu trúc như sau: dòng đầu là số nguyên k < 10 là số lượng số n, k dòng tiếp theo mỗi dòng ghi một số n (1< n < 2.10 9 ) Kết quả: Ghi ra file PASCAL.OUT k dòng, mỗi dòng một số nguyên là kết quả bài toán tương ứng với một số n trong file dữ liệu theo đúng thứ tự. Ví dụ: PASCAL.INP PASCAL.OUT 3 3 8 11 4 2 8 Chú ý: Trong 40 % số test có n < 30; trong 70% số test có n < 5000. Hết Họ và tên thí sinh : …………… Số báo danh Họ và tên, chữ ký: Giám thị 1: Giám thị 2: HƯỚNG DẪN CHẤM THI CHỌN HỌC SINH GIỎI LỚP 12 THPT Kỳ thi thứ nhất - Năm học 2012 – 2013 MÔN: TIN HỌC Chấm bằng chương trình tự động AMM2: Câu 1: 10 test, mỗi test đúng cho 0,5 điểm. Câu2: 10 test, mỗi test đúng cho 0,5 điểm. Câu3: 10 test đầu, mỗi test đúng cho 0,3 điểm. 10 test sau, mỗi test đúng cho 0,2 điểm. Câu 4: 10 test, mỗi test đúng cho 0,5 điểm. Bài 1: Const fi ='number.inp'; fo ='number.out'; cs:array[1 8] of longint = (9, 180, 2700, 36000, 450000, 5400000, 63000000, 720000000); Var n : longint; f,g :text; Function num(n:longint):char; var k, so, mu : longint; s : string; Begin k:=1; mu:=1; while (k<9)and(cs[k]<n) do begin n:=n-cs[k]; inc(k); mu:=mu*10; end; if mu=1 then so:=n div k else so:=n div k+mu+ord(n mod k>0)-1; str(so,s);s:=s[k]+s; num:=s[n mod k+1]; End; BEGIN assign(f,fi); reset(f); assign(g,fo); rewrite(g); while not seekeof(f) do begin readln(f,n); writeln(g,num(n)); end; close(f); close(g); END. Bài 2: const fi = 'Gombi.Inp'; fo = 'Gombi.Out'; nmax =10000; var cha,u,v:array[1 nmax]of longint; n,m:longint; procedure nhap; var f:text; i:longint; begin assign(f,fi); reset(f); readln(f,n,m); for i:=1 to m do readln(f,u[i],v[i]); close(f); for i:=1 to n do cha[i]:=-1; end; procedure Join(u,v:longint); begin While cha[u]>0 do u:=cha[u]; While cha[v]>0 do v:=cha[v]; if u = v then exit; if cha[u]<cha[v] then begin cha[u]:=cha[u]+cha[v]; cha[v]:=u; end else begin cha[v]:=cha[v]+cha[u]; cha[u]:=v; end; end; procedure xuly; var i,j,max:longint; f:text; begin for i:=1 to m do Join(u[i],v[i]); max:=0; for i:=1 to n do if cha[i]<max then max:=cha[i]; assign(f,fo); rewrite(f); write(f,-max); close(f); end; begin nhap; xuly; end. Bài 3: const fi='Triangle.inp'; fo='Triangle.out'; max=1500; type td=record x,y:int64; end; mang=array[1 max+1] of extended; var f,g:text; a:array[1 max+1] of td; kc:mang; n,d:integer; tong:extended; procedure doc; var i:integer; begin assign(f,fi); reset(f); readln(f,n); for i:=1 to n do readln(f,a[i].x,a[i].y); close(f); end; function truoc(t1,t2:td):boolean; begin truoc:=true; if t1.y<t2.y then exit; if (t1.y=t2.y) and (t1.x<t2.x) then exit; truoc:=false; end; procedure xeptoado(l,r:integer); var dau,cuoi:integer; chot,tg:td; begin dau:=l; cuoi:=r; chot:=a[(l+r) div 2]; repeat while truoc(a[dau],chot)=true do dau:=dau+1; while truoc(chot,a[cuoi])=true do cuoi:=cuoi-1; if dau<=cuoi then begin tg:=a[dau]; a[dau]:=a[cuoi]; a[cuoi]:=tg; inc(dau); dec(cuoi); end; until dau>cuoi; if l<cuoi then xeptoado(l,cuoi); if dau<r then xeptoado(dau,r); end; procedure qsort(l,r:integer); var dau,cuoi:integer; chot,tg:extended; begin dau:=l; cuoi:=r; chot:=kc[(l+r) div 2]; repeat while kc[dau]<chot do dau:=dau+1; while chot<kc[cuoi] do cuoi:=cuoi-1; if dau<=cuoi then begin tg:=kc[dau]; kc[dau]:=kc[cuoi]; kc[cuoi]:=tg; dau:=dau+1; cuoi:=cuoi-1; end; until dau>cuoi; if l<cuoi then qsort(l,cuoi); if dau<r then qsort(dau,r); end; function dd(a,b:td):extended; begin dd:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y)); end; procedure tinh(kc:mang); var buoc,run:integer; begin buoc:=1; run:=1; while buoc<n do begin inc(buoc); if kc[buoc]=kc[buoc-1] then inc(run) else if run>1 then begin tong:=tong+(run*(run-1) div 2); run:=1; end; end; fillchar(kc,sizeof(kc),0); end; procedure xuli; var i,j:integer; m:extended; begin for i:=1 to n do begin d:=0; for j:=1 to n do begin m:=dd(a[i],a[j]); if m>0 then begin inc(d); kc[d]:=m; end; end; if d>1 then begin qsort(1,d); tinh(kc); end; end; end; procedure loaitru; var i,j,l,r,m,d,c,u:integer; look:td; nb:boolean; begin for i:=1 to n do for j:=i+1 to n do begin if ((a[i].x+a[j].x) mod 2=0) and ((a[i].y+a[j].y) mod 2=0) then begin look.x:=(a[i].x+a[j].x) div 2; look.y:=(a[i].y+a[j].y) div 2; l:=1; r:=n; while l<=r do begin m:=(l+r) div 2; if (a[m].y>look.y) or ((a[m].y=look.y) and (a[m].x>look.x)) then r:=m-1 else if (a[m].y<look.y) or ((a[m].y=look.y) and (a[m].x<look.x)) then l:=m+1 else if (a[m].x=look.x) and (a[m].y=look.y) then begin tong:=tong-1; break; end; end; end; end; end; Begin doc; xeptoado(1,n); tong:=0; assign(g,fo); rewrite(g); xuli; loaitru; writeln(g,tong:0:0); close(g); End. Bài 4: const fi = 'pascal.inp'; fo = 'pascal.out'; var n:longint; i,sobit:byte; f,g:text; begin assign(f,fi); reset(f); assign(g,fo); rewrite(g); read(f,n); sobit:=0; for i:=0 to 31 do if (1 shl i)and n <>0 then inc(sobit); write(g,1 shl sobit); close(f); close(g); end. SỞ GD&ĐT NINH BÌNH ĐỀ THI CHỌN HỌC SINH GIỎI LỚP 12 THPT Kỳ thi thứ nhất - Năm học 2012 – 2013 MÔN: TIN HỌC Ngày thi: 10/10/2012 (Thời gian làm bài: 180 phút) Đề thi gồm 04 câu, trong 02 trang Tổng quan đề thi: Câu Tên file bài làm Tên file Input Tên file Otput Thời gian chạy 1 TOUR.PAS TOUR.INP TOUR.OUT 1 giây/test 2 HAIVAN.PAS HAIVAN.INP HAIVAN.OUT 1 giây/test 3 FROG.PAS FROG.INP FROG.OUT 1 giây/test 4 EC.PAS EC.INP EC.OUT 1 giây/test Câu 1: Thăm quan. Có N đoàn khách du lịch được đánh số từ 1 đến N đang chờ Công ty du lịch Ninh Bình đưa đi thăm quan theo hợp đồng. Đoàn thứ i sẽ đi tới thăm quan ở địa điểm cách trụ sở Công ty d i km. Công ty có M xe khách (N≤ M) đánh số từ 1 tới M, xe thứ j có mức tiêu thụ xăng là v j lít/km. Yêu cầu: Hãy chọn N xe và bố trí để đưa các đoàn đến địa điểm thăm quan, mỗi xe chỉ phục vụ một đoàn, sao cho tổng lượng xăng cần phải sử dụng là ít nhất. Dữ liệu: Cho trong file TOUR.INP • Dòng 1 chứa hai số nguyên N, M ( N≤ M ≤ 500). • Dòng 2 chứa N số nguyên dương d 1 , d 2 , , d N (d i < 10 4 ). • Dòng 3 chứa M số nguyên dương v 1 , v 2 , , v M (v i < 10 4 ) . Kết quả: Ghi ra file TOUR.OUT một số nguyên là lượng xăng ít nhất cần cung cấp cho các xe. Ví dụ: TOUR.INP TOUR.OUT 3 4 7 5 9 17 13 15 10 256 Câu 2: An toàn đường hầm Hải Vân. Hầm đèo Hải Vân nối liền hai địa danh nổi tiếng miền trung Việt Nam là Huế và Đà Nẵng. Theo quy định, xe ô tô đi trong đường hầm không được vượt nhau. Đầu năm 2012 (là năm an toàn giao thông), ban quản lý đã đặt camera theo dõi xe ô tô vào và ra đường hầm. Có N xe ô tô đánh số từ 1 tới N được camera ghi nhận đi vào đường hầm (bên địa phận Huế) và ra khỏi đường hầm (bên địa phận Đà Nẵng). Yêu cầu: Dựa vào thứ tự các xe vào và ra khỏi đường hầm, xác định số lượng xe ra đường hầm không đúng thứ tự như khi đi vào và số lượng những xe chắc chắn đã vượt xe khác trong đường hầm. Dữ liệu: Cho trong file HAIVAN.INP: • Dòng 1 chứa số nguyên N ( N ≤ 10 5 ). • Dòng 2 chứa N số lần lượt là chỉ số các xe theo thứ tự đi vào đường hầm. • Dòng 3 chứa N số lần lượt là chỉ số các xe theo thứ tự đi ra khỏi đường hầm. Kết quả:Ghi ra file HAIVAN.OUT trên 02 dòng: • Dòng 1 chứa số nguyên K - số xe đi ra không đúng thứ tự như khi vào đường hầm. • Dòng 2 chứa số nguyên M - số xe đã vượt xe khác trong hầm. Nếu không có xe nào phạm luật thì mỗi dòng ghi một số 0. Ví dụ: HAIVAN.INP HAIVAN.OUT Giải thích ĐỀ THI CHÍNH THỨC 5 1 2 3 4 5 1 4 5 3 2 4 3 Xe 2, 3, 4, 5 ra không đúng thứ tự Xe 3, 4, 5 đã vượt xe 2 Chú ý: Trong 60% số test có n < 200; Trong mỗi test, chỉ làm đúng 1phần vẫn được cho điểm phần đó. Câu 3: Chú ếch. Chú ếch con phải giải quyết một chuyện phức tạp: có một hàng N lá bông súng trên mặt nước đánh số từ 1 đến N từ trái qua phải (2 ≤ N ≤ 10 5 ), khi chú ếch đang ngồi ở lá thứ m mỗi bước chú có thể nhảy sang một trong k lá bông súng khác có thứ tự là m + p i (i = 1, 2, ,k; k ≤ 1000). Chú ếch của chúng ta ban đầu ở lá a và cần di chuyển trên các lá bông súng để đến bắt con ruồi ở lá b (1 ≤ a, b ≤ N, a ≠ b). Yêu cầu: Cho n, a, b và các bước nhảy ếch có thể thực hiện. Hãy chỉ ra số bước nhảy ít nhất để ếch đến bắt được ruồi tại lá b. Dữ liệu: Cho trong file FROG.INP: • Dòng 1 chứa 4 số nguyên N, k, a và b. • Trên k dòng sau mỗi dòng là một số nguyên p i (|p i | < N). Kết quả: Ghi ra file FROG.OUT số bước nhảy ít nhất tìm được. Nếu không có cách nhảy ghi -1. Ví dụ: FROG.INP FROG.OUT 5 2 2 3 2 -1 2 Chú ý: Trong 60% số test có n < 30. Bµi 4: Ðp cäc. Một công trình xây dựng đang cần thi công việc ép N chiếc cọc. Người ta sử dụng một chiếc máy ép cọc. Mỗi lần sử dụng, máy có thể ép được những cọc thuộc hình tròn bán kính R, tâm là vị trí máy. Giả thiết rằng khu vực thi công nằm trong hệ trục Oxy và máy chỉ được đặt trên trục Ox tại các điểm có tọa độ nguyên. Do mỗi lần vận hành máy rất vất vả tốn kém nên các thợ máy muốn xác định số lần ép cọc ít nhất có thể. Yêu cầu: Cho biết tọa độ của N chiếc cọc, hãy xác định số lần sử dụng máy ít nhất có thể ép được tất cả N cọc. Dữ liệu: Cho trong file EC.INP: • Dòng 1 chứa 2 số nguyên dương N và R. (N≤10 5 , R ≤10 3 ). • Trong N dòng tiếp theo, mỗi dòng chứa 2 số nguyên x i và y i thể hiện tọa độ cọc thứ i ( 0 ≤x i ≤10 9 ; | y i | ≤ R). Kết quả: Ghi ra file EC.OUT một số nguyên là số lần ép cọc ít nhất tìm được. Ví dụ: EC.INP EC.OUT 4 3 2 2 4 -2 7 2 8 1 2 Chú ý: Trong 60% số test tất cả các cọc thẳng hàng và đều nằm trên trục Ox với n ≤ 1000, R ≤ 100, các tọa độ nhỏ hơn 10 4 . Hết Họ và tên thí sinh : …………… Số báo danh Họ và tên, chữ ký: Giám thị 1: Giám thị 2: [...]...HƯỚNG DẪN CHẤM THI CHỌN HỌC SINH GIỎI LỚP 12 THPT Kỳ thi thứ nhất - Năm học 2 012 – 2013 MÔN: TIN HỌC Chấm bằng chương trình tự động AMM2: Câu 1: 10 test, mỗi test đúng cho 0,5 điểm Câu2: 10 test, mỗi test đúng cho 0,5 điểm Câu3: 10 test, mỗi test đúng cho 0,5... var i:longint; le,ri:real; begin for i:=1 to n do begin le:=a[i].x - sqrt(sqr(r)-sqr(a[i].y)); ri:=a[i].x + sqrt(sqr(r)-sqr(a[i].y)); if le =r then exit; i:=l; j:=r; k:=d[l+random(r-l +1)] .y; Repeat while d[i].yk do dec(j); if... inc(c); hd[c]:=s; truoc[s]:=u; d[s]:=d[u]+1; dau[s]:=true; end; if dau[b]=true then exit; end; end; end; procedure inkq; var sl,u:longint; begin assign(f,fo); rewrite(f); if dau[b]=false then writeln(f ,-1 ) else writeln(f,d[b]); close(f); end; BEGIN nhap; chuanbi; xuli; inkq; END Bài 4 const fi = 'EC.INP'; fo = 'EC.OUT'; nmax = 100005; Type diem = record x,y:longint; end; var n,R,kq:longint; A,D:array[1... end; {=================================================} procedure WriteOutput; var i: Integer; Sum: LongInt; hf: Text; begin Sum := 0; for i := 1 to n do Inc(Sum, Val[1, n - i + 1] * Val[2, i]); for i := 1 to n do Val[1, Pos[1, n - i + 1]] := Pos[2, i]; Assign(hf, fout); Rewrite(hf); Writeln(hf, Sum); for i := 1 to n do Writeln(hf, Val[1, i]); Close(hf); end; begin ReadInput; QuickSort(1, 1, n); QuickSort(2,... While d[j].y>k do dec(j); if ij; Sort(l,j); Sort(i,r); end; procedure xuly; var diemcuoi,i:longint; f:text; begin diemcuoi: =-1 ; kq:=0; For i:=1 to n do if d[i].x>diemcuoi then begin inc(kq); diemcuoi:= d[i].y; end; assign(f,fo); rewrite(f); write(f,kq); close(f); end; begin nhap; chuanbi; Sort(1,n); Xuly; end . SỞ GD&ĐT NINH BÌNH ĐỀ THI CHỌN HỌC SINH GIỎI LỚP 12 THPT Kỳ thi thứ nhất - Năm học 2 012 – 2013 MÔN: TIN HỌC Ngày thi: 09/10/2 012 (Thời gian làm bài:180 phút ) Đề thi gồm 04 câu, trong. sobit); close(f); close(g); end. SỞ GD&ĐT NINH BÌNH ĐỀ THI CHỌN HỌC SINH GIỎI LỚP 12 THPT Kỳ thi thứ nhất - Năm học 2 012 – 2013 MÔN: TIN HỌC Ngày thi: 10/10/2 012 (Thời gian làm bài: 180 phút) Đề thi gồm 04 câu, trong. và tên thí sinh : …………… Số báo danh Họ và tên, chữ ký: Giám thị 1: Giám thị 2: HƯỚNG DẪN CHẤM THI CHỌN HỌC SINH GIỎI LỚP 12 THPT Kỳ thi thứ nhất - Năm học 2 012 – 2013 MÔN: TIN HỌC Chấm bằng

Ngày đăng: 28/07/2015, 16:41

Mục lục

  • Câu 2: An toàn đường hầm Hải Vân.

  • Bµi 4: Ðp cäc.

Tài liệu cùng người dùng

Tài liệu liên quan