Tải bản đầy đủ (.pdf) (257 trang)

Tổng hợp 75 đề thi HSG Tin học Pascal THPT cấp Tỉnh từ 2008-2018

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 (13.36 MB, 257 trang )

khán giả
mua vé đặt chỗ. Các số được ghi cách nhau ít nhất một dấu cách.
Dữ liệu ra: Ghi ra file văn bản NOUCAMP.OUT, theo cấu trúc như sau:
- Dòng 1: Ghi K số nguyên dương b1, b2, …, bk, là chỉ số của các ghế trên sân chưa
được mua vé đặt chỗ (K = N-M). Các số được ghi theo thứ tự tăng dần và cách nhau
ít nhất một dấu cách.
Ví dụ:
NOUCAMP.INP
16 10
2 3 6 7 8 9 10 12

NOUCAMP.OUT
1 4 5 11 13 14
15 16

==HẾT==

2


HƯỚNG DẪN VÀ ĐÁP ÁN CHẤM
ĐỀ THI CHỌN HSG LỚP 12 THPT –NĂM HỌC 2015-2016
Mơn: Tin học
Khóa thi ngày 23 - 3 - 2015
I- Phương pháp:
- Giám khảo tạo bộ dữ liệu vào, tính tốn kết quả. Thực hiện 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 ý dưới đây để tính tốn kết quả của
dữ liệu vào.
- Đối với câu 1: Giám khảo phải tạo được 06 bộ test, chương trình học sinh đúng
01 bộ test giám khảo cho 0.5 điểm.


- Đối với câu 2:
+ Giám khảo phải tạo được 07 bộ test, chương trình học sinh đúng 01 bộ test
thì giám khảo cho 0.5 điểm.
- Đối với câu 3:
+ Giám khảo phải tạo được 07 bộ test, chương trình học sinh đúng 01 bộ test
thì giám khảo cho 0.5 điểm.
+ Giám khảo phải tạo bộ test.
- 1 bộ test: 1<=N<=255
- 1 bộ test: 300<=N<=32000
- 2 bộ test: 35000<=N<=64000
- 3 bộ test: 65000<=N<=400000
II- Chương trình gợi ý:
const

fi='demkt.inp';
fo='demkt.out';
var
i,j,n,dem:integer;
f:text;
xau:string;
Procedure doc;
begin
assign(f,fi); reset(f);
read(f,xau);
close(f);
end;
Procedure xuly;
begin
assign(f,fo);
rewrite(f);

for i:=1 to length(xau) do
if xau[i] in ['0'..'9'] then
inc(dem);
write(F,dem);
close(f);
end;
BEGIN
DOC;
XULY;
END.
{$r+}

3


program chuongtrinhhoanvi;
{$B-}
uses crt;
const fi='hoanvi.inp';
fo='hoanvi.out';
MN = 10;
var
s: array[0..MN] of byte;
n:byte;
f,g:text;
function Next(m: integer): Boolean;
var
i, j,t: integer;
begin
Next := false; i := m-1;

while (s[i] > s[i+1]) do i:= i-1;
if i = 0 then exit;
j := m;
while (s[j] < s[i]) do j := j-1;

end;

t:= s[i]; s[i]:= s[j]; s[j]:= t;
i:= i+1; j:= m;
while i < j do
begin
t:= s[i];s[i]:= s[j]; s[j]:= t;
i:= i+1; j:= j-1;
end;
Next:= true;

procedure hoanvi(m: integer);
var
d: longint;
i: integer;
begin
if (m < 1) or (m > MN) then exit;
assign(g,fo); rewrite(g);
d := 0;
for i := 0 to m do s[i]:= i;
repeat
d := d+1;
for i:= 1 to m do write(g, s[i]);
writeln(g);
until not (next(m));

{writeln(g,' Tong cong ',d, ' hoan vi');
close(g);
end;
BEGIN
assign(f,fi); reset(F);
READ(f,n);
close(f);
hoanvi(n);
END.

}

{$r+}
const
fi='noucamp.in1';
fg='noucamp.out';
maxn=51000;
type mmc=array[1..maxn] of byte;
var a:mmc;
ti,n,m:longint;

4


procedure
var

xl;
f:text;
i,x:longint;

by,bi:word;

begin
fillchar(a,sizeof(a),0);
assign(f,fi);reset(f);
readln(f,n,m);
for i:=1 to m do
begin
read(f,x);
by:=(x div 8)+1;
bi:= x mod 8;
if bi=0 then
begin
bi:=8;
by:=by-1;
end;
a[by]:=a[by] or (1 shl (bi-1));
end;
close(f);
end;
procedure xuat;
var f:text; i,j:longint;
begin
assign(f,fg);rewrite(f);
{writeln(f,n-m);}
for i:= 1 to n div 8 do
for j:=1 to 8 do
if ((a[i] shr (j-1)) and 1)=0 then write(f,(i-1)*8+j,' ');
close(f);
end;

begin
xl;
xuat;
end.

5


SỞ GD&ĐT QUẢNG BÌNH
ĐỀ THI CHÍNH THỨC
SỐ BÁO DANH: .......................

KỲ THI CHỌN ĐỘI TUYỂN CHÍNH THỨC
DỰ THI HSG QUỐC GIA LỚP 12 THPT
NĂM HỌC 2016 - 2017
Môn thi: TIN HỌC - Vịng 1
(Khóa thi ngày 14 tháng 09 năm 2016)

Thời gian làm bài: 180 phút (không kể thời gian giao đề)
Đề thi gồm 3 trang

ĐỀ RA
Sử dụng ngôn ngữ lập trình Free Pascal để lập trình giải các bài tốn sau:
Câu 1 (6,0 điểm): Dãy con có tổng lớn nhất

ROUND.PAS

Trên một vịng trịn người ta đánh dấu n vị trí. Các vị trí được đánh số thứ tự từ
1 đến n theo chiều kim đồng hồ. Tại vị trí i người ta ghi số nguyên ai (i =1, 2, ..., n).
Yêu cầu: Tìm cách chọn ra một dãy con gồm các số liên tiếp trên vòng tròn (theo

chiều kim đồng hồ) sao cho tổng giá trị các số trong dãy con là lớn nhất.
Dữ liệu vào: Cho trong file văn bản ROUND.INP có cấu trúc như sau:
- Dịng đầu tiên: Ghi số nguyên dương n ( 0 £ n £ 107);
- Dòng thứ i trong số n dòng tiếp theo: Ghi số nguyên ai (- 10000 £ ai £ 10000).
Kết quả: Ghi ra file văn bản ROUND.OUT theo cấu trúc như sau:
- Dòng đầu tiên ghi tổng giá trị các số của dãy con tìm được.
- Dịng thứ hai ghi hai số nguyên d và k, trong đó d là vị trí của số hạng trên vịng
trịn được chọn làm phần tử đầu tiên của dãy con, k là số lượng các số hạng của dãy
con tìm được. Các số được ghi cách nhau ít nhất một dấu cách.
Ví dụ :
ROUND.INP
ROUND.OUT
ROUND.INP
ROUND.OUT
7
11
11
21
2
5 4
-10
8 3
-4
-1
1
-3
-7
5
4
6

6
-4
-1
-9
20
-5
6
-3

1/3


Câu 2: (7,0 điểm) Xâu đối xứng

PALIN.PAS

Palindrome là một xâu đối xứng, tức là một xâu mà đọc từ trái sang phải cũng
giống như đọc từ phải sang trái. Với một xâu cho trước, xác định số ít nhất các ký tự
cần chèn vào xâu để nhận được một Palindrome. Ví dụ, bằng cách chèn hai ký tự vào
xâu “Ab3bd” ta nhận được một Palindrome (chẳng hạn “dAb3bAd” hoặc
“Adb3bdA”). Tuy nhiên, nếu chèn ít hơn 2 ký tự thì khơng thể tạo được Palindrome.
Yêu cầu: Cho một xâu St, hãy tìm số ngun dương d là số lượng ít nhất các kí tự
cần chèn vào xâu St để được một Palindrome.
Dữ liệu vào: Cho trong file văn bản PALIN.INP có cấu trúc như sau:
- Dòng đầu tiên: Ghi số nguyên dương n là độ dài của xâu St (3 £ n £ 5000).
- Dòng thứ hai: Ghi xâu St, xâu St gồm các ký tự là các chữ cái in hoa ‘A’ .. ‘Z’, các
chữ cái in thường ‘a’ .. ‘z’ và các chữ số ‘0’.. ‘9’, các chữ cái in hoa và in thường
trong xâu được xem là khác nhau.
Kết quả: Ghi ra file văn bản PALIN.OUT theo cấu trúc như sau:
- Dịng đầu tiên: Ghi số ngun d.

Ví dụ:
PALIN.INP
PALIN.OUT
5
2
Ab3bd
Câu 3: (7,0 điểm) Xóa số
DEL.PAS
Xét dãy vơ hạn các số tự nhiên liên tiếp bắt đầu từ 1: 1, 2, 3, ... và n số nguyên
dương a1, a2, ..., an. Trên dãy vô hạn các số tự nhiên này, tiến hành xóa hết các số
chia hết cho a1, sau đó xóa hết các số chia hết cho a2 mà chưa được xóa,..., cuối cùng
xóa hết các số chia hết cho an mà chưa được xóa. Sau khi xóa ta tiến hành đánh số thứ
tự các số chưa được xóa bắt đầu từ 1.
Yêu cầu: Cho dãy số a1, a2, ..., an và k, hãy tìm số tự nhiên được đánh số thứ k trên
dãy số tự nhiên sau khi xóa.
Dữ liệu vào: Cho trong file văn bản DEL.INP có cấu trúc như sau:
- Dòng đầu tiên: Ghi số nguyên T là số bộ dữ liệu (T ≤ 10);
- T nhóm dịng sau, mỗi nhóm có dạng:
+ Dịng đầu của nhóm chứa hai số nguyên dương n và k (1 ≤ n ≤ 10;1 ≤ k ≤ 1015);
+ Dòng thứ hai của nhóm chứa n số nguyên dương a1, a2, ..., an (1 < ai ≤ 1015).
Kết quả: Ghi ra file văn bản DEL.OUT theo cấu trúc như sau:
Gồm T dòng, mỗi dòng chứa một số tự nhiên là kết quả tương ứng của bộ test
trong dữ liệu vào.
2/3


Ví dụ:
DEL.INP
2
1 5

2
2 2
2 3

DEL.OUT
9
5

==HẾT==

3/3



×