Đề thi, hướng dẫn làm các bài trong đề thi và bộ test dùng để chấm điểm. Chỉ cần tải về làm rồi dùng chương trình Themis để chấm bài. Nếu không làm được thì đọc hướng dẫn làm bài và đọc chương trình tôi đã viết. Cảm ơn
Trang 1SỞ GIÁO DỤC VÀ ĐÀO TẠO
THANH HOÁ
ĐỀ DỰ BỊ
KỲ THI HỌC SINH GIỎI CẤP TỈNH
Năm học: 2018-2019
Môn thi: Tin học - Lớp 11 THPT
Thời gian: 180 phút (không kể thời gian giao đề)
Ngày thi: 21/03/2019
Đề này có 05 câu, gồm 02 trang.
Tổng quan bài thi:
Tên bài File chương trình File dữ liệu vào File kết quả
Dữ liệu vào là đúng đắn, không cần phải kiểm tra Trong các file dữ liệu vào/ra, nếu dữ liệu trên cùng một dòng thì được cách nhau bởi ít nhất 1 dấu cách Dấu (*) trong tên file chương trình biểu thị đuôi file tùy thuộc vào NNLT sử dụng ('pas' đối với NNLT PASCAL, ‘c’ đối với NNLT C, ).
Bài 1 (6 điểm): Số gần nguyên tố.
Số nguyên tố là số nguyên dương chỉ có 2 ước số phân biệt Bờm luôn thích những cái đặc biệt và mới lạ Anh đưa ra một định nghĩa mới “Số gần nguyên tố” – là số nguyên dương có đúng 3 ước số phân biệt.
Yêu cầu: Cho số nguyên dương N, hãy cho biết có bao nhiêu số “gần nguyên tố” nhỏ
hơn hoặc bằng N.
Dữ liệu vào: Đọc từ tệp BAI1.INP - số nguyên N (1≤ N ≤ 106).
Dữ liệu ra: Ghi ra tệp BAI1.OUT kết quả tìm được.
Ví dụ:
(Có 1 số “gần nguyên tố” nhỏ hơn hoặc bằng 6 là số 4)
Bài 2 (5 điểm): Bộ số thỏa mãn.
Cho số tự nhiên N Hãy cho biết có bao nhiêu bộ số tự nhiên x, y, z thỏa mãn: x+y+z=N và 0<x<y<z.
Dữ liệu vào: Đọc từ tệp BAI2.INP gồm một số N (5<N≤ 104).
Dữ liệu ra: Ghi ra tệp BAI2.OUT – số lượng các bộ số thỏa mãn.
Ví dụ:
Số báo danh
……….
Trang 2(Có 2 bộ số thỏa mãn là 1+2+5 và 1+3+4)
Bài 3 (4 điểm): Tổng lớn nhất.
Cho dãy số nguyên A gồm N phần tử a1, a2, …., aN Dãy con ai, ai+1, …, aj (1≤i≤j≤N) là dãy được tạo từ các phần tử liên tiếp của A, bắt đầu từ phần tử thứ i và kết thúc ở phần tử thứ j.
Yêu cầu: Tìm dãy con của dãy A sao cho tổng các phẩn tử trong dãy con đó là lớn nhất.
Dữ liệu vào: Đọc từ tệp BAI3.INP gồm:
- Dòng đầu là N (1≤N≤106)
- Dòng tiếp theo là các số ai (-32000≤ ai ≤32000).
Dữ liệu ra: Ghi ra tệp BAI3.OUT tổng các phần tử trong dãy con tìm được.
Ví dụ:
7
2 -4 5 -1 4 6 -1
14
Bài 4 (3 điểm): Giải nén.
Xâu thuần nhất là xâu chỉ bao gồm các chữ cái tiếng Anh Một xâu thuần nhất S
có thể được viết thu gọn (để tiết kiệm bộ nhớ) bằng cách dùng tần số xuất hiện liên tiếp của nhóm đó.
Yêu cầu: Cho xâu thuần nhất dạng thu gọn, hãy chuyển thành xâu thuần nhất ban đầu
Dữ liệu vào: Đọc từ tệp BAI4.INP xâu ký tự S (chỉ gồm các chữ cái in hoa) dạng thu
gọn có độ dài không quá 103.
Dữ liệu ra: Ghi ra tệp BAI4.OUT xâu thuần nhất ban đầu.
Ví dụ:
XC((A2B)3C2)2Y XCAABAABAABCCAABAABAABCCY
Bài 5 (2 điểm): Số nhỏ nhất.
Cho số nguyên dương N
Yêu cầu: Xác định số nguyên dương nhỏ nhất có đúng N ước số.
Dữ liệu vào: Đọc từ tệp BAI5.INP - số nguyên dương N (1≤ N≤ 103)
Dữ liệu ra: Ghi ra tệp BAI5.OUT kết quả tìm được (kết quả đảm bảo không quá
2
Trang 3Ví dụ:
Hết
-Giám thị coi thi không giải thích gì thêm.
Trang 4const fi='BAI1.INP';
fo='BAI1.OUT';
var f:text;
N,d,i:longint;
{==========================}
function NTO(n:longint):boolean;
var i:longint;
begin
if n<2 then
exit(false);
for i:=2 to trunc(sqrt(n)) do
if n mod i=0 then
exit(false);
exit(true);
end;
{=========================}
BEGIN
assign(f,fi);
reset(f);
readln(f,n);
d:=0;
for i:=2 to n do
if sqrt(i)=trunc(sqrt(i)) then
if NTO(trunc(sqrt(i))) then
inc(d);
assign(f,fo);
rewrite(f);
write(f,d);
close(f);
END
4
Trang 5const fi='BAI2.INP';
fo='BAI2.OUT';
var f:text;
n,x,y,z:longint;
d:int64;
begin
assign(f,fi);
reset(f);
read(f,n);
close(f);
d:=0;
for x:=1 to n div 3 do
for y:=x+1 to (n-x) div 2 do
begin
z:=n-x-y;
if z>y then
inc(d);
end;
assign(f,fo);
rewrite(f);
write(f,d);
close(f);
end
Trang 6const fi='BAI3.INP';
fo='BAI3.OUT';
var f:text;
a:array[1 1000000] of longint;
n,i,j:longint;
max,s:int64;
begin
assign(f,fi);
reset(f);
readln(f,n);
for i:=1 to n do
read(f,a[i]);
close(f);
max:=-33000000000;
s:=0;
for i:=1 to n do
begin
if s<=0 then
s:=a[i]
else
s:=s+a[i];
if s>max then
max:=s;
end;
assign(f,fo);
rewrite(f);
write(f,max);
close(f);
end
6
Trang 7const fi='BAI4.INP';
fo='BAI4.OUT';
var f:text;
so,s,a,b:ansistring;
i,j,k,n,mn,dn:longint;
begin
assign(f,fi);
reset(f);
readln(f,s);
close(f);
a:='';
i:=1;
while i<=length(s) do
if (s[i]>='A') and (s[i]<='Z') then
begin
a:=a+s[i];
inc(i);
end
else
if (s[i]>='0') and (s[i]<='9') then
begin
j:=i+1;
while (j<=length(s)) and (s[j]>='0') and (s[j]<='9') do
inc(j);
so:=copy(s,i,j-i);
val(so,n);
delete(s,i,j-i);
for k:=1 to n-1 do
a:=a+s[i-1];
end
else
begin
mn:=1;
dn:=0;
j:=i+1;
while mn>dn do
begin
if s[j]='(' then
mn:=mn+1;
if s[j]=')' then
dn:=dn+1;
j:=j+1;
Trang 8j:=j-1;
b:=copy(s,i+1,j-i-1);
k:=j+1;
while (k<=length(s)) and (s[k]>='0') and (s[k]<='9') do
inc(k);
so:=copy(s,j+1,k-j-1);
val(so,n);
delete(s,i,k-i);
for k:=1 to n do
insert(b,s,i);
end;
assign(f,fo);
rewrite(f);
write(f,a);
close(f);
end
8
Trang 9const fi='BAI5.INP';
fo='BAI5.OUT';
var f:text;
b,a:array[1 100] of longint;
n,na,nb,i:longint;
m:qword;
{=================================}
function NTO(n:longint):boolean;
var k,maxk:longint;
begin
if n<2 then
exit(false);
maxk:=trunc(sqrt(n));
k:=2;
while k<=maxk do
if n mod k=0 then
exit(false)
else
inc(k);
exit(true);
end;
{================================}
function LT(a,b:longint):qword;
begin
if b=0 then
LT:=1
else
LT:=LT(a,b-1)*a;
end;
{=================================}
begin
assign(f,fi);
reset(f);
readln(f,n);
close(f);
i:=2;
na:=0;
while na<100 do
begin
if NTO(i) then
begin
inc(na);
Trang 10end;
inc(i);
end;
nb:=0;
i:=2;
while n>1 do
if n mod i=0 then
begin
inc(nb);
b[nb]:=i;
n:=n div i;
i:=2;
end
else
inc(i);
m:=1;
for i:=nb downto 1 do
m:=m*LT(a[nb-i+1],b[i]-1);
assign(f,fo);
rewrite(f);
write(f,m);
close(f);
end
10