Câu 1: (3,0 điểm) Chia bánh (tên file bài làm CAKE.PAS)
Trong buổi tối trung thu có một cái bánh hình tròn. Bánh được viền quanh bởi N quả dâu và quả sim.
Yêu cầu: Tìm cách cắt bánh bằng một nhát dao để được hai phần sao cho số lượng quả dâu ở phần này bằng số lượng quả dâu ở phần kia và số lượng quả sim ở phần này bằng số lượng quả sim ở phần kia.
Dữ liệu vào: Cho trong file CAKE.INP có cấu trúc như sau:
Dòng 1: Ghi số nguyên dương N là số lượng quả dâu và quả sim ở trên viền bánh (1 N 255).
Dòng 2: Ghi dãy gồm N ký tự “D” hoặc “S” ghi liền nhau. Các vị trí gắn quả trên bánh được đánh số từ 1 đến N theo
5 trang |
Chia sẻ: lephuong6688 | Lượt xem: 935 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Kỳ thi chọn học sinh giỏi lớp 12 Quảng Bình năm học 2006 - 2007 đề chính thức - Môn: Tin học (vòng 2), để 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 chọn học sinh giỏi lớp 12
Quảng bình năm học 2006-2007
Đề chính thức - môn : tin học (vòng 2) SBD: Thời gian làm bài: 180 phút.
Đề ra
Câu 1: (3,0 điểm) Chia bánh (tên file bài làm CAKE.PAS)
Trong buổi tối trung thu có một cái bánh hình tròn. Bánh được viền quanh bởi N quả dâu và quả sim.
Yêu cầu: Tìm cách cắt bánh bằng một nhát dao để được hai phần sao cho số lượng quả dâu ở phần này bằng số lượng quả dâu ở phần kia và số lượng quả sim ở phần này bằng số lượng quả sim ở phần kia.
Dữ liệu vào: Cho trong file CAKE.INP có cấu trúc như sau:
Dòng 1: Ghi số nguyên dương N là số lượng quả dâu và quả sim ở trên viền bánh (1 N 255).
Dòng 2: Ghi dãy gồm N ký tự “D” hoặc “S” ghi liền nhau. Các vị trí gắn quả trên bánh được đánh số từ 1 đến N theo chiều kim đồng hồ bắt đầu từ một vị trí tuỳ ý.
Dữ liệu ra: Ghi ra file CAKE.OUT theo cấu trúc như sau:
Dòng 1: Nếu tìm được cách chia thì ghi hai số nguyên dương a, b (ab) cho biết các quả ở vị trí a, a+1, ..., b là các quả thuộc cùng một trong hai phần bánh. Nếu không tìm được cách chia thì ghi số 0.
Ví dụ:
CAKE.INP
CAKE.OUT
CAKE.INP
CAKE.OUT
6
DSSSDS
3 5
5
DSDDS
0
Câu 2: (3,5 điểm) Mã hoá xâu nhị phân (tên file bài làm BINCODE.PAS)
Người ta mã hoá một xâu nhị phân gồm các ký tự 0 và 1 như sau : Với một xâu nhị phân S, mã hoá của nó là một mảng T chứa các số nguyên không âm sao cho T[1] bằng 0 hoặc bằng 1 tuỳ theo ký tự đầu tiên của S là 0 hay 1. Nếu T[1]=0 thì tính từ trái sang phải của xâu S, lần lượt T[2] bằng số ký tự 0 liên tiếp, T[3] bằng số ký tự 1 liên tiếp, T[4] bằng số ký tự 0 liên tiếp... cho đến hết xâu S.
Yêu cầu: Cho một xâu nhị phân S, hãy xác định mảng T theo cách mã hoá trên.
Dữ liệu vào: Cho trong file văn bản BINCODE.INP, có cấu trúc như sau:
Dòng 1: Ghi số N là số lượng xâu nhị phân cần mã hoá (1 N 100).
N dòng tiếp theo: Mỗi dòng ghi một xâu nhị phân S (1 length(S) 100).
Dữ liệu ra: Ghi ra file văn bản BINCODE.OUT, theo cấu trúc như sau:
N dòng: Mỗi dòng ghi mảng T là kết quả mã hoá của xâu nhị phân tương ứng. Các số trên cùng một dòng được ghi cách nhau một dấu cách.
Ví dụ:
BINCODE.INP
BINCODE.OUT
2
0001111100111
10001111100111
0 3 5 2 3
1 1 3 5 2 3
Câu 3: (3,5 điểm) Hình chữ nhật (tên file bài làm: HCN.PAS)
Cho N hình chữ nhật trên mặt phẳng toạ độ sao cho các cạnh song song với các trục toạ độ. Các hình chữ nhật được đánh số từ 1..N. Hình chữ nhật i được gọi là bao hình chữ nhật j nếu cả bốn đỉnh của hình chữ nhật j đều nằm trong hoặc nằm trên các cạnh của hình chữ nhật i.
Yêu cầu: Tìm dãy các hình chữ nhật bao nhau sao cho số lượng các hình bao nhau lớn nhất.
Dữ liệu vào: Cho trong file văn bản HCN.INP, có cấu trúc như sau:
Dòng 1: Ghi số nguyên N, là số lượng hình chữ nhật (1 N 1000).
N dòng tiếp theo: Mỗi dòng ghi bốn số nguyên x1, y1, x2, y2 lần lượt là hoành độ, tung độ của các đỉnh trái trên, phải dưới của một hình chữ nhật (-10000 < x1 , y1, x2, y2 < 10000)
Dữ liệu ra: Ghi ra file văn bản HCN.OUT, theo cấu trúc như sau :
Dòng 1: Ghi số nguyên k là số lượng các hình chữ nhật bao nhau lớn nhất tìm được.
Ví dụ:
HCN.INP
HCN.OUT
6
1 5 2 2
2 4 3 3
1 5 5 2
4 3 8 1
5 6 8 4
6 6 8 5
2
Hết
Hướng dẫn chấm
đề thi chính thức học sinh giỏi lớp 12 - vòng 2
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ả.
- Giám khảo có thể sử dụng chương trình gợi ý để tính kết quả của dữ liệu vào: CAKE.PAS BINCODE.PAS HCN.PAS
- 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,0 đ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 đó.
- Bài toán có thể có nhiều kết quả đúng, nếu kết quả của học sinh khác với đáp án nhưng vẫn đúng thì giám khảo vẫn cho điểm tối đa.
II/ Chương trình gợi ý:
Câu 1: CAKE.PAS
{$r+}
Const fi='Cake.INP';
fo='Cake.OUT';
Var A:String;
N:Byte;
f:Text;
Procedure Read_file;
Begin
Assign(f,fi);
Reset(f);
Readln(f,n);
Read(f,A);
Close(f);
End;
Procedure Xuli;
Var i,sd,d,j,n1:Byte;
st:String;
Begin
If n mod 2 = 1 then Begin Writeln(f,0); Close(f); Halt; End;
d:=0;
For i:=1 to n do
If A[i]='D' then Inc(d);
If d mod 2 = 1 then Begin Writeln(f,0); Close(f); Halt; End;
n1:=n div 2;
For i:=1 to n1 do
Begin
sd:=0;
st:=copy(a,i,n1);
For j:=1 to n1 do
If st[j]='D' then Inc(sd);
If sd=(d div 2) then Begin Write(f,i,' ',i+n1-1); Close(f); Halt; End;
End;
End;
Begin
Read_file;
Assign(f,fo);
Rewrite(f);
Xuli;
Close(f);
End.
Câu 2 : BINCODE.PAS
program bincode;
const fi='bincode.inp';
fo='bincode.out';
type mmcs=array[1..100] of string;
var f:text;
a:mmcs;
n:word;
procedure doc;
var i:word;
begin
assign(f,fi); reset(f);
readln(f,n);
for i:=1 to n do readln(f,a[i]);
close(f)
end;
procedure xl;
var i,j,x:word; st,s1:string;
begin
assign(f,fo);rewrite(f);
for i:=1 to n do
begin
st:=a[i];
while st[1]=' ' do delete(st,1,1);
while st[length(st)]=' ' do delete(st,length(st),1);
write(f,st[1],' ');
while st'' do
begin
if st[1]='1' then
begin
x:=pos('0',st);
if x0 then s1:=copy(st,1,x-1)
else begin s1:=st;x:=length(st)+1;end;
delete(st,1,x-1);
write(f,length(s1),' ');
end;
if st[1]='0' then
begin
x:=pos('1',st);
if x0 then s1:=copy(st,1,x-1)
else begin s1:=st;x:=length(st)+1;end;
delete(st,1,x-1);
write(f,length(s1),' ');
end;
end;
writeln(f);
end;
close(f);
end;
begin
doc;
xl;
end.
Câu 3: HCN.PAS
{$R+,Q+,S+}
const INP ='hcn.inp';
OUT ='hcn.out';
MAX = 1000;
var x1,y1,x2,y2,kq :array [1..MAX] of integer;
n : integer;
fi,fo : text;
procedure input;
var i : integer;
begin
assign(fi,INP); reset(fi);
read(fi,n);
for i := 1 to n do read(fi,x1[i],y1[i],x2[i],y2[i]);
close(fi);
end;
function area(i : integer) : longint;
begin
area:=longint(abs(x1[i]-x2[i]))*longint(abs(y1[i]-y2[i]));
end;
procedure qsort(l,r : integer);
var i, j, mid, t : integer;
begin
mid := (1 + r) div 2;
i := 1; j:= r;
repeat
while area(i) < area(mid) do inc(i);
while area(j) > area(mid) do dec(j);
if i <= j then
begin
t := x1[i]; x1[i] := x1[j]; x1[j] := t;
t := x2[i]; x2[i] := x2[j]; x2[j] := t;
t := y1[i]; y1[i] := y1[j]; y1[j] :=t;
t := y2[i]; y2[i] := y2[j]; y2[j] :=t;
inc(i); dec(j);
end;
until i > j;
if i < r then qsort(1,j);
end;
function bao(i,j : integer) : integer;
begin
if (x1[i]= y1[j])and(x2[i]>= x2[j])and (y2[i] <= y2[j]) then bao := 1
else bao := 0;
End;
procedure progress;
var i, j : integer;
begin
for i := 1 to n do kq[i] := 1;
for i := 2 to n do
for j := 1 to i-1 do
if (bao(i,j) = 1) then
kq[i] := kq[j] + 1;
end;
procedure output;
var i, tmp : integer;
begin
tmp := 0;
for i := 1 to n do
if kq[i] > tmp then tmp := kq[i];
{if tmp = 1 then tmp := -1;}
assign(fo,OUT); rewrite(fo);
writeln(fo,tmp);
close(fo);
end;
begin
input;
qsort(1,n);
progress;
output;
end.
Hết
File đính kèm:
- De thi hoc sinh gioi tinh quang binh.doc