Tải bản đầy đủ (.doc) (14 trang)

Đề thi học sinh giỏi tin lớp 11

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (104.96 KB, 14 trang )

Câu 1: (3 điểm)

DAYSO.PAS

Cho một số nguyên dơng N (N<=10000). Hãy tìm dãy số
thỏa mãn các tính chất sau:
-Phần tử đầu tiên của dãy là số N.
-Các phần tử của dãy là các số nguyên dơng và phải giảm
dần.
-Với mỗi số ai (i>1) thuộc dãy thì ai hoặc là số nguyên tố
hoặc là ớc của một trong các số từ a1 đến ai-1
-Số lợng phần tử của dãy tìm đợc phải lớn nhất.
Dữ liệu vào: Cho trong file văn bản DAYSO.INP có cấu trúc nh
sau:
Dòng 1: Ghi số N.
Dữ liệu ra: Ghi ra file DAYSO.OUT theo cấu trúc nh sau:
Dòng 1: Ghi số K là số lợng phần tử của dãy tìm đợc.
Dòng 2: Ghi K số nguyên dơng là các phần tử của dãy tìm đợc.
Các số ghi cách nhau ít nhất một dấu cách.
Ví dụ:
DAYSO.INP
DAYSO.OUT
6
5
6 5 3 2 1
Câu 2: (3 điểm)

BIEUTHUC.PAS

Trong một biểu thức gồm có các biến, phép toán nhân và
lũy thừa, số mũ.


Trong đó: Biến là một chữ cái la tinh in thờng a.. z, phép nhân
đợc ký hiệu là dấu sao *, phép lũy thừa đợc ký hiệu là dấu mũ
^, số mũ là một chữ số trong các chữ số từ 1..9.
Hãy rút gọn biểu thức có dạng nh đã cho để đợc biểu thức
mới thỏa mãn đồng thời các điều kiện sau:
-Các biến xuất hiện trong biểu thức không quá 1 lần.
-Các biến phải đợc đa ra theo thứ tự từ điển.
Dữ liệu vào: Cho trong file văn bản BIEUTHUC.INP có cấu trúc
nh sau:
Dòng 1: Ghi xâu ký tự S là biểu thức cần rút gọn. (số lợng ký tự
của S bé hơn 256)
Dữ liệu ra: Ghi ra file BIEUTHUC.OUT theo cấu trúc nh sau:
Dòng 1: Ghi xâu X là xâu ký tự sau khi đã rút gọn.
Chú ý: Sau khi rút gọn, giá trị của số mũ m của các biến có thể
nằm trong đoạn [1..1000].
Ví dụ:
1


BIEUTHUC.INP
a*a^9*x*x*x*b*b^3

Câu 3: (4 điểm)

BIEUTHUC.OUT
a^10*b^4*x^3

XEPTRANH

Tranh vẽ là một hình chữ nhật. Cho N bức tranh, bức tranh

thứ i đợc cho bởi độ dài hai cạnh là a i và bi. Hãy tìm cách xếp các
bức tranh chồng lên nhau thỏa mãn đồng thời các điều kiện sau:
-Bức tranh ở trên phải luôn nằm trong bức tranh ở dới (mọi
điểm của bức tranh ở trên không đợc chìa ra ngoài so với bức
tranh ở dới).
-Các cạnh của bức tranh trên phải đợc đặt song song với các
cạnh của bức tranh ở dới nó.
-Số lợng các bức tranh đợc xếp là lớn nhất.
Dữ liệu vào: Cho trong file văn bản XEPTRANH.INP có cấu trúc
nh sau:
Dòng 1: Ghi số N là số lợng các bức tranh đã cho. (N nguyên dơng,
n<=100)
N dòng tiếp theo: mỗi dòng ghi hai số a i bi (0< xi , yi <30000)
là độ dài hai cạnh của bức tranh. Hai số ghi cách nhau ít nhất
một dấu cách.
Dữ liệu ra: Ghi ra file văn bản XEPTRANH.OUT theo cấu trúc sau:
Dòng 1: Ghi số K là số lợng bức tranh tìm đợc.
Dòng 2: Ghi K số nguyên dơng là chỉ số của các bức tranh đợc
chọn. Các số đợc ghi theo thứ tự từ dới lên trên của chồng tranh đợc xếp. Các số ghi cách nhau ít nhất 1 dấu cách.
Ví dụ:
XEPTRANH.INP
XEPTRANH.OUT
4
3
4 7
1 4 3
6 5
2 4
3 5


2


hớng dẫn chấm
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 mẫu để tính kết quả
của dữ liệu vào: DAYSO.PAS BIEUTHUC.PAS XEPTRANH.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 đ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 nhng vẫn đúng thì giám khảo vẫn cho
điểm tối đa.
- Giám khảo có thể sử dụng các test gợi ý dới đây nếu cần thiết.
II/ Chơng trình mẫu
DAYSO.PAS
const fi='dayso.in3';
fo='dayso.ou3';
type mmc=array[1..10000] of word;
var f:text;
n,dem:word;
a:mmc;
procedure doc;
begin
assign(f,fi);reset(f); readln(f,n); close(f);
end;
function nt(i:word):boolean;

var j:word;
begin
nt:=true;
for j:=2 to trunc(sqrt(i)) do
if i mod j = 0 then
begin
nt:=false; break;
end;
end;
procedure xl;
var i,j:word;

3


begin
dem:=1; a[dem]:=n;
for i:=n-1 downto 1 do
begin
if nt(i) then
begin
dem:=dem+1;
a[dem]:=i;
end
else
begin
for j:=1 to dem do
if a[j] mod i=0 then
begin dem:=dem+1;a[dem]:=i;break; end;
end;

end;
end;
procedure xuat;
var i:word;
begin
assign(f,fo);rewrite(f); writeln(f,dem);
for i:=1 to dem do write(f,a[i],' ');
close(f);
end;
begin doc; xl; xuat; end.

BIEUTHUC.PAS

const fi='bieuthuc.in1';
fo='bieuthuc.ou1';
type mmc=array['a'..'z'] of word;
var f:text; s:string; a:mmc;
procedure doc;
begin assign(f,fi);reset(f); readln(f,s); close(f); end;
procedure xl;
var so,ml:integer;
begin
assign(f,fo);rewrite(f);
while s<>'' do
begin
if length(s)=1 then begin [s[1]]:=a[s[1]]+1;delete(s,1,1);
end
else
begin
if s[2]='*' then

begin a[s[1]]:=a[s[1]]+1; delete(s,1,2); end;
if s[2]='^' then
begin
val(s[3],so,ml); a[s[1]]:=a[s[1]]+so; delete(s,1,4);
end;
end;
end;
close(f);
end;
procedure xuat;
var c:char; s1,s2:string;
begin

4


assign(f,fo); rewrite(f); s1:='';
for c:='a' to 'z' do
begin
if a[c]>0 then
if a[c]>1 then begin str(a[c],s2);s1:=s1+c+'^'+s2+'*';
else s1:=s1+c+'*';
end;
delete(s1,length(s1),1); writeln(f,s1);
close(f);
end;
begin doc; xl; xuat; end.

end


XEPTRANH.PAS

const fi='xeptranh.inp';
fo='xeptranh.out';
type mmc=array[0..100] of longint;
var f:text; n:word; a,b,qh,tr,cs:mmc;
procedure doc;
var i:word;t:longint;
begin
assign(f,fi);reset(f); readln(f,n); a[0]:=0;b[0]:=0;
for i:=1 to n do
begin
readln(f,a[i],b[i]);
if a[i]> b[i] then
begin t:=a[i];a[i]:=b[i];b[i]:=t; end;
end;
close(f);
for i:=1 to n do cs[i]:=i;
end;
procedure sx;
var i,j:word; t:longint;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]*b[i]>a[j]*b[j] then
begin
t:=a[i];a[i]:=a[j];a[j]:=t;
t:=b[i];b[i]:=b[j];b[j]:=t;
t:=cs[i];cs[i]:=cs[j];cs[j]:=t;
end;

end;
procedure xl;
var i,j:word;
begin
sx; fillchar(qh,sizeof(qh),0);
for i:=1 to n do
for j:=0 to i-1 do
if (a[i]>=a[j]) and (b[i]>=b[j]) then
if qh[i]begin qh[i]:=qh[j]+1;tr[i]:=j;end;
end;
procedure xuat;

5


var i,max,vt:word;
begin
assign(f,fo);rewrite(f); max:=qh[1]; vt:=1;
for i:=1 to n do
if maxi:=vt; writeln(f,max);
while qh[i]<>0 do
begin write(f,cs[i],' '); i:=tr[i]; end;
close(f);
end;
begin doc; xl; xuat; end.

III/ Mét sè test gîi ý.
DAYSO.PAS

DAYSO.IN
1

DAYSO.OU

1
1
6
10 7 5 3 2 1
12
20 19 17 13 11 10 7 5 4 3 2 1

10
20

BIEUTHUC.PAS
BIEUTHUC.IN
BIEUTHUC.O
U
BIEUTHUC.IN

x^7*l^3*i^8*s^6*j^6*q*y^9*r^2*v*s^6*e^7*
m^7*z^2*o^6
e^7*i^8*j^6*l^3*m^7*o^6*q*r^2*s^12*v*x^
7*y^9*z^2
a^8*v*j^3*t^5*p*a^9*i^7*q^3*u^7*x^5*b*z^6*j
^9*s*b^8*u^7

BIEUTHUC.O a^17*b^9*i^7*j^12*p*q^3*s*t^5*u^14*v*x^
U

5*z^6
BIEUTHUC.IN x*x*x*x*x*x*a*x
BIEUTHUC.O a*x^7
U
XEPTRANH.PAS
XEPTRANH.IN
XEPTRANH.OU
10
21
4
6
2
3
6
7
10
12
13
5
4
7

1
7
5
4
5
8
6
20

19
17
6
4

6
8 6 7 2 5 4

4
2 4 3 5

6


3
7
2
1
3
6
1
2
3
4
5
6

5
3
1

1
1
1
1

4
20
19
18
17
16
15

Giám khảo lu ý khi sử dụng các test để chấm bài:
+ Tổng số lợng bức tranh của học sinh bắt buộc phải giống
đáp án.
+ Chỉ số của bức tranh có thể có nhiều cách khác nhau.

Câu 1:

(3 điểm)

SAPDAY.PAS

Cho dãy số có N phần tử (1<=N<=400000). Trong đó các
phần từ ai của dãy đều đôi một khác nhau (tức không có phần tử
trùng nhau, 0<=ai<=400000). Hãy tìm các sắp xếp dãy số theo
trật tự tăng dần.
Dữ liệu vào: Cho trong file văn bản SAPDAY.INP có cấu trúc nh
sau:

Dòng 1: Ghi số N là số lợng các phần tử của dãy đã cho. (N nguyên
dơng)
Dòng 2: Ghi N số nguyên không âm a i. Các số ghi cách nhau ít
nhất một dấu cách.
Dữ liệu ra: Ghi ra file văn bản SAPDAY.OUT theo cấu trúc sau:
Dòng 1: Ghi N số nguyên không âm là các phần tử của dãy sau
khi đã sắp theo trật tự tăng dần.
Ví dụ:
7


SAPDAY.INP
4
4 6 400000 3
Câu 2:

(3 điểm)

SAPDAY.OUT
3 4 6 400000
GAPMAT.PAS

Một nhóm gồm N học sinh tham gia một câu lạc bộ. Biết
thời gian mà học sinh i có mặt tại câu lạc bộ là [a i ,bi] (ai < bi). Cô
giáo chủ nhiệm câu lạc bộ muốn đến thăm các học sinh trong
nhóm. Hãy giúp cô giáo xác định thời điểm đến câu lạc bộ để
gặp đợc nhiều học sinh trong nhóm nhất.
Dữ liệu vào: Cho trong file văn bản GAPMAT.INP có cấu trúc nh
sau:
Dòng 1: Ghi số N (N nguyên dơng, N<=1000)

N dòng: mỗi dòng ghi 2 số nguyên không âm a i bi (0<= ai , bi
<=32766). Các số ghi cách nhau ít nhất một dấu cách.
Dữ liệu ra: Ghi ra file văn bản GAPMAT.OUT theo cấu trúc:
Dòng 1: Ghi số nguyên dơng k là số lợng học sinh có mặt tại câu
lạc bộ khi cô giáo đến.
Dòng 2: Ghi chỉ số của k học sinh có mặt tại câu lạc bộ khi cô
đến. Các số ghi cách nhau ít nhất một dấu cách, theo thứ tự tăng
dần.
Ví dụ:
GAPMAT.INP
GAPMAT.OUT
GAPMAT.INP
GAPMAT.OUT
6
3
5
1
1 2
1 2 3
1 2
1
2 3
3 5
2 5
7 9
5 7
11 15
6 7
17 21
9 11


Câu 3:

(4 điểm)

HCN.PAS

Cho N hình chữ nhật (1<=N<=100), mỗi hình đợc cho bởi
hai số nguyên dơng là độ dài hai cạnh. Quan hệ bao hàm đợc
định nghĩa nh sau: Hình chữ nhật A đợc gọi là có quan hệ bao
hàm với hình B nếu nh đặt trọn hình A vào trong hình B
hoặc đặt trọn hình B trong hình A (Các cạnh của hình A phải
8


song song với các cạnh tơng ứng của hình B, cho phép có thể
chung nhau các điểm biên)
Hãy tìm tập con trong tập N hình chữ nhật đã cho sao cho
thỏa mãn đồng thời các điều kiện sau:
-Có số lợng hình là nhiều nhất.
-Hai hình bất kỳ trong tập con không thể có quan hệ bao
hàm nhau.
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ố N. (N nguyên)
N dòng tiếp theo: mỗi dòng ghi hai số xi yi (0< xi , yi <=30000)
là độ dài hai cạnh của hình chữ nhật. Hai số ghi cách nhau ít
nhất một dấu cách.
Dữ liệu ra: Ghi ra file văn bản HCN.OUT theo cấu trúc sau:
Dòng 1: Ghi số K là số lợng hình chữ nhật tìm đợc.
K dòng tiếp theo: Mỗi dòng ghi hai số nguyên x i yi là độ dài hai

cạnh của các hình chữ nhật tìm đợc. Hai số ghi cách nhau ít
nhất một dấu cách.
Ví dụ:
HCN.INP
HCN.OUT
4
2
4 7
4 7
6 5
5 6
2 4
3 5

hớng dẫn chấm
9


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 mẫu để tính kết quả
của dữ liệu vào: SAPDAY.PAS GAPMAT.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 đ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 nhng vẫn đúng thì giám khảo vẫn cho
điểm tối đa.

- Giám khảo có thể sử dụng các test gợi ý dới đây nếu cần thiết.
II/ Chơng trình mẫu
SAPDAY.PAS
const fi='sapday.in1';
fo='sapday.ou1';
maxn=10000;
type mmc=array[0..50000] of byte;
var a:mmc; n:longint;
f:text;
procedure xl;
var i,x:longint;b,bi:word;
begin
fillchar(a,sizeof(a),0);
assign(f,fi);reset(f);
readln(f,n);
for i:=1 to n do
begin
read(f,x);b:=x shr 3;bi:=x and 7; a[b]:=a[b] or (1 shl bi);
end;
close(f);
end;
procedure xuat;
var f:text; i:longint;j:byte;
begin
assign(f,fo);rewrite(f);
for i:=0 to 50000 do
for j:=0 to 7 do
if ((a[i] shr j) and 1)=1 then write(f,i*8+j,' ');
close(f);
end;

procedure tt;
var f:text; i,j,x:longint;
begin
assign(f,fi);rewrite(f);
writeln(f,maxn); randomize;
for i:=1 to maxn do
begin

10


x:=0;
for j:=1 to 8 do x:=x+random(50000);
write(f,x,' ');
end;
close(f);
end;
begin xl; xuat; end.

GAPMAT.PAS

Const Fi='gapmat.in2';
fo='gapmat.ou2';
type mmc=Array[0..32766] of integer;
Var a,d,c:^mmc; F :Text; n,max,vmax:integer; ti:longint;
Procedure Init;
Var
i,j : integer;
Begin
Assign(f,fi); Reset(f);

Readln(f,n);
new(a);new(c);new(d);
for i:=0 to 32766 do a^[i]:=0;
For i:=1 to n do
Begin
Readln(f,d^[i],c^[i]);
for j:=d^[i] to c^[i] do a^[j]:=a^[j]+1;
End;
Close(f);
max:=a^[1]; vmax:=1;
for i:=0 to 32766 do
if maxbegin
max:=a^[i];
vmax:=i;
end;
assign(f,fo);rewrite(f); writeln(f,max);
for i:=1 to n do
if (vmax>=d^[i]) and (vmax<=c^[i]) then write(f,i,' ');
close(f);
End;
Begin Init; end.

HCN.PAS

const fi='hcn.in1';
fo='hcn.ou1';
type mmc=array[0..101] of longint;
var f:text; n:word; a,b,qh,tr,cs:mmc;
procedure doc;

var i:word;t:longint;
begin
assign(f,fi);reset(f); readln(f,n);
a[0]:=0;b[0]:=0;
for i:=1 to n do
begin
readln(f,a[i],b[i]);
if a[i]> b[i] then
begin t:=a[i];a[i]:=b[i];b[i]:=t; end;
end;

11


close(f);
for i:=1 to n do cs[i]:=i;
end;
procedure sx;
var i,j:word; t:longint;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then
begin
t:=a[i];a[i]:=a[j];a[j]:=t;
t:=b[i];b[i]:=b[j];b[j]:=t;
t:=cs[i];cs[i]:=cs[j];cs[j]:=t;
end;
end;
procedure xl;

var i,j:word;
begin
sx; fillchar(qh,sizeof(qh),0);
for i:=1 to n do
for j:=0 to i-1 do
if (a[i]>a[j]) and (b[i]if qh[i]begin qh[i]:=qh[j]+1; tr[i]:=j; end;
end;
procedure xuat;
var i,max,vt:word;
begin
assign(f,fo);rewrite(f); max:=qh[1]; vt:=1;
for i:=1 to n do
if maxi:=vt; writeln(f,max+1);
while i<>0 do
begin writeln(f,a[i],' ',b[i]); i:=tr[i]; end;
close(f);
end;
begin doc; xl; xuat; end.

III/ Mét sè test gîi ý.
SAPDAY.PAS
SAPDAY.IN

10
6 9 8 7 1 2 3 4 5 10
3
0 2 1

4
4 6 400000 3
3
400000
300000
200000

SAPDAY.OU
1 2 3 4 5 6 7 8 9 10
0 1 2
3

4

200000

6

400000
300000

400000

12


GAPMAT.PAS
GAPMAT.IN
6
1

2
3
4
3
6
5
1
3
7
11
17
5
1
2
3
4
5

GAPMAT.OUT
5
1 2 3 4 5

6
5
4
5
7
7

2

1 2

32766
5
9
15
21

2
1 2

2
3
4
5
6

HCN.PAS
HCN.INP
10
21
4
6
2
3
6
7
10
12
13

5
4
7
3
7
2
1
3
6
1
2
3
4
5
6
4

1
7
5
4
5
8
6
20
19
17
6
4
5

3
1
4
20
19
18
17
16
15

HCN.OUT
4
13
12
10
1

17
19
20
21

2
4 6
3 7

1
3
6
6

5
4
3
2
1
1

4
15
16
17
18
19
20

13


1 4
2 5
3 6
4 7
4
1 30000
2 29000
3 28000
30000 30000

1 4


3
3
2
1

28000
29000
30000

Giám khảo lu ý khi sử dụng các test để chấm bài:
+ Tổng số lợng hình chữ nhật của học sinh bắt buộc phải
giống đáp án.
+ Chỉ số của các hình chữ nhật có thể có nhiều cách khác
nhau.

14



×