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

Đề thi chọn HSG môn tin năm 2019

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 (87.54 KB, 10 trang )

SỞ GIÁO DỤC VÀ ĐÀO TẠO
THANH HOÁ

KỲ THI HỌC SINH GIỎI CẤP TỈNH
Năm học: 2018-2019

ĐỀ DỰ BỊ

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.

Số báo danh
…………………….

Tổng quan bài thi:
Tên bài
Bài 1 Số gần nguyên tố
Bài 2 Bộ số thỏa mãn
Bài 3 Tổng lớn nhất
Bài 4 Giải nén
Bài 5 Số nhỏ nhất

File chương trình
BAI1.*
BAI2.*
BAI3.*
BAI4.*
BAI5.*


File dữ liệu vào
BAI1.INP
BAI2.INP
BAI3.INP
BAI4.INP
BAI5.INP

File kết quả
BAI1.OUT
BAI2.OUT
BAI3.OUT
BAI4.OUT
BAI5.OUT

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ụ:
BAI1.INP

BAI1.OUT


6
1
(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à 0Dữ liệu vào: Đọc từ tệp BAI2.INP gồm một số N (5Dữ liệu ra: Ghi ra tệp BAI2.OUT – số lượng các bộ số thỏa mãn.
Ví dụ:

BAI2.INP
8

BAI2.OUT
2
1


(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ử a 1, 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ụ:
BAI3.INP
7

BAI3.OUT
14

2 -4 5 -1 4 6 -1
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ụ:

BAI4.INP
XC((A2B)3C2)2Y

BAI4.OUT
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



1018).
Ví dụ:
BAI5.INP
6

BAI5.OUT
12

----------------------------- Hết ----------------------------Giám thị coi thi không giải thích gì thêm.

3


const 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


const 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.

5


const 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


const 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;
end;

7


j:=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


const 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);
a[na]:=i;

9


end;
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



×