1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Đề thi và đáp án môn Tin kỳ thi HSG tỉnh Thanh Hóa năm học 2020-2021

10 5,4K 63
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 95 KB
File đính kèm Test_va_code.rar (11 MB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đề 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 (bằng C++ và Pascal) để biết. Cảm ơn

Trang 1

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

THANH HOÁ

ĐỀ CHÍNH THỨC

KỲ THI HSG CÁC MÔN VĂN HOÁ CẤP TỈNH

NĂM HỌC: 2020-2021

Môn thi: Tin học BẬC HỌC: THPT

Thời gian: 180 phút (không kể thời gian giao đề)

Ngày thi: 15/12/2020

Đề này có 05 câu, gồm 03 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, ).

CÂU 1 (6 điểm): Chia quà

Trường THPT A chia quà tết cho các học sinh thuộc diện chính sách dịp cuối năm

2020, có X chiếc áo và Y hộp bánh Một phương án chia quà của nhà trường là chọn ra N học sinh được nhận quà sao cho có thể chia hết X chiếc áo và Y hộp bánh, đồng thời mỗi học sinh

sẽ nhận được số lượng chiếc áo bằng nhau và số lượng hộp bánh cũng bằng nhau.

Yêu cầu: Tìm tất cả các phương án chia quà thoả mãn điều kiện nêu trên Giả sử rằng số học

sinh thuộc diện chính sách của nhà trường là đủ nhiều để có thể thực hiện được tất cả các phương án chia quà.

Dữ liệu vào: Đọc từ tệp CAU1.INP – gồm 2 số nguyên dương X, Y (X, Y≤ 109).

Dữ liệu ra: Ghi ra tệp CAU1.OUT một số nguyên là số phương án chia quà tìm được

Ví dụ:

CÂU 2 (5 điểm): Điểm ảnh

Trong máy tính, một bức ảnh có các điểm ảnh, mỗi điểm ảnh được biểu thị bởi một màu, có thể có những điểm ảnh có màu giống nhau, mỗi màu được quy định bằng một mã màu, mã màu là một số nguyên dương có giá trị không quá 106.

Yêu cầu: Cho trước một bức ảnh có N điểm ảnh và mã màu của từng điểm ảnh Hãy cho biết

số lượng điểm ảnh có mã màu giống nhau nhiều nhất.

Dữ liệu vào: Đọc từ tệp CAU2.INP gồm hai dòng:

- Dòng thứ nhất ghi số nguyên dương N (N≤106)

- Dòng thứ hai ghi N số nguyên dương a1, a2, , aN với ai là mã màu của điểm ảnh thứ i (1≤ai≤106 i=1 N)

Số báo danh

……….

Trang 2

Dữ liệu ra: Ghi ra tệp CAU2.OUT một số nguyên là kết quả tìm được

Ví dụ:

8

1 9 2 9 3 1 1 9

3

Câu 3 (4 điểm): Xoá số

Cho số tự nhiên N Bằng cách giữ nguyên hoặc xoá đi một số chữ số liên tiếp của N (nhưng không xoá hết) ta nhận được một số mới, nếu số N bị chia thành 2 phần thì số mới được ghép lại từ hai phần này và giữ nguyên trật tự.

Yêu cầu: Hãy xác định tất cả số cách xoá như trên để số N mới sau khi xoá chia hết cho 3 Lưu

ý là hai vị trí khác nhau sẽ tạo ra hai cách xoá khác nhau Số N giữ nguyên cũng được coi là một cách xoá.

Dữ liệu vào: Đọc từ tệp CAU3.INP chứa số nguyên dương N (không quá 105 chữ số)

Dữ liệu ra: Ghi ra tệp CAU3.OUT một số nguyên là số cách xoá tìm được

Ví dụ:

Giới hạn:

- Có 50% số test có số các chữ số của N≤300

- Có 25% số test tiếp theo có số các chữ số của N≤104

- Có 25% số test còn lại có số các chữ số của N≤105

Câu 4 (3 điểm): Từ vựng

Muốn cải thiện vốn từ vựng tiếng Anh của mình thông qua trò chơi nhận diện từ, Quyên

tự viết ra một xâu S có độ dài không quá 106 chỉ gồm các kí tự thường trong bảng chữ cái tiếng Anh Từ đó, Quyên tìm ra tất cả các từ vựng có trong S Một từ vựng sẽ thu được bằng cách ghép một số kí tự liên tiếp lấy từ S, giữ nguyên trật tự của chúng, thoả mãn một trong hai điều kiện sau:

- Bắt đầu bằng một nguyên âm (là các chữ cái: a, e, i, o, u) và kết thúc bằng một phụ âm (là các chữ cái còn lại)

Trang 3

adceba 9

Giới hạn:

- Có 1/3 số test có độ dài xâu S không quá 104

- Có 2/3 số test còn lại không có ràng buộc gì thêm

Câu 5 (2 điểm): Tam giác

Hiền có N que tính, mỗi que có độ dài là một số nguyên dương và đôi một khác nhau Hiền muốn tạo ra các tam giác bằng cách ghép ba que tính với nhau, độ dài mỗi cạnh của tam giác đúng bằng độ dài của một que tính.

Yêu cầu: Giúp Hiền tính xem có thể tạo được bao nhiêu tam giác nhộn, tam giác vuông và tam

giác tù khác nhau từ các que tính này Hai tam giác được gọi là khác nhau nếu có ít nhất một que tính khác nhau.

Dữ liệu vào: Đọc từ tệp CAU5.INP gồm:

 Dòng đầu tiên là số lượng que tính N (3≤ N≤5000)

 Dòng thứ hai gồm N số nguyên dương không lớn hơn 104 là chiều dài của N que tính.

Dữ liệu ra: Ghi ra tệp CAU5.OUT một dòng duy nhất gồm 3 số nguyên lần lượt là số lượng

tam giác nhọn, tam giác vuông và tam giác tù tao được.

Ví dụ:

6

2 12 9 10 3 15

2 1 4

Giới hạn:

- Có 25% số test có 3≤N≤300

- 75% số test còn lại không có ràng buộc gì thêm.

Hết

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

Trang 4

CHƯƠNG TRÌNH

Câu 1:

Pascal

const fi='cau1.inp';

fo='cau1.out';

var x,y,t,d: int64;

i: longint;

function ucln(a,b: int64): int64;

var tg: int64;

begin

while a mod b <>0 do

begin

tg:= a mod b;

a:= b;

b:= tg;

end;

ucln:= b;

end;

begin

assign(input,fi);

reset(input);

assign(output,fo);

rewrite(output);

readln(x,y);

t:= ucln(x,y);

if trunc(sqrt(t))=sqrt(t) then

d:= -1 else

d:= 0;

for i:= 1 to trunc(sqrt(t)) do

if t mod i =0 then

inc(d,2);

write(d);

close(input);

close(output);

end

C++

#include <bits/stdc++.h>

using namespace std;

ifstream fi;

ofstream fo;

long long x,y,m,dem,i,j;

int main()

{

fi.open("Cau1.inp");

fi>>x>>y;

fi.close();

dem=0;

m=trunc(sqrt(x));

for (i=1;i<=m;i++) {

j=x/i;

if (x%i==0 && y%i==0)

Trang 5

Câu 2:

Pascal

const fi='CAU2.inp';

fo='CAU2.out';

var i,j,n,max:longint;

a:array[0 1000001] of longint;

begin

assign(input,fi);

reset(input);

assign(output,fo);

rewrite(output);

readln(input,n);

max:=0;

for i:=1 to n do

begin

read(input,j);

inc(a[j]);

if a[j]>max then

max:=a[j];

end;

write(output,max);

close(input);

close(output);

end

C++

#include<bits/stdc++.h>

using namespace std;

int i,n,dmax,x;

int d[1000001];

ifstream fi;

ofstream fo;

int main()

{

fi.open("CAU2.INP");

fi>>n;

for (i=1;i<=n;i++) {

fi>>x;

d[x]++;

} fi.close();

fo.open("CAU2.OUT");

dmax=d[1];

for (i=2;i<=1000000;i++)

if (d[i]>dmax)

dmax=d[i];

fo<<dmax;

fo.close();

return 0;

}

Trang 6

Câu 3:

Pascal

const fi='cau3.inp';

fo='cau3.out';

var n: ansistring;

s: array[0 100011] of longint;

m: array[0 2] of longint;

t: int64;

i,j,k: longint;

begin

assign(input,fi);

reset(input);

assign(output,fo);

rewrite(output);

read(n);

s[0]:= 0;

for i:= 1 to length(n) do

s[i]:= s[i-1]+ord(n[i])-48;

k:= s[length(n)] mod 3;

t:= 0;

for i:= 0 to length(n) do

begin

j:= s[i] mod 3-k;

if j<0 then

j:= j+3;

t:= t+m[j];

inc(m[s[i] mod 3]);

end;

if k<>0 then

dec(t);

write(t);

close(input);

close(output);

end

C++

#include <bits/stdc++.h>

using namespace std;

ifstream fi;

ofstream fo;

int a[100001],t[100001],d[3];

string s;

int i,n,k,j,kq;

int main()

{

fi.open("CAU3.INP");

getline(fi,s);

fi.close();

n=s.size();

s='0'+s;

for (i=1;i<=n;i++) {

a[i]=s[i]-48;

Trang 7

d[t[i]%3]++;

}

if (k>0)

kq ;

fo.open("CAU3.OUT");

fo<<kq;

fo.close();

return 0;

}

Câu 4:

Pascal

const fi='CAU4.inp';

fo='CAU4.out';

var i,j,n:longint;

na,pa,dem:qword;

st:ansistring;

begin

assign(input,fi);

reset(input);

assign(output,fo);

rewrite(output);

read(input,st);

for i:=1 to length(st) do

inc(na);

pa:=length(st)-na;

write(output,na*pa);

close(input);

close(output);

end

C++

#include<bits/stdc++.h>

using namespace std;

ifstream fi;

ofstream fo;

string s;

int main()

{

long long d,i,n;

fi.open("CAU4.INP");

getline(fi,s);

fi.close();

n=s.size();

s=' '+s;

d=0;

for(i=1;i<=n;i++)

if(s[i]=='a' || s[i]=='e' || s[i]=='i' || s[i]=='o' || s[i]=='u')

d++;

fo.open("CAU4.OUT");

fo<<d*(n-d);

fo.close();

return 0;

}

Trang 8

Câu 5:

PASCAL

const fi='CAU5.INP';

fo='CAU5.OUT';

var f:text;

d:array[1 200000000] of longint;

a:array[1 5000] of longint;

tg,n,i,j:longint;

demtg,demtgvuong,demtgnhon,demtgtu:qword;

//////////////////////////////////////

function OK(a,b,c:longint):boolean;

begin

OK:=a+b>c;

end;

/////////////////////////////////////

function tgnhon(a,b,c:longint):boolean;

begin

tgnhon:=a*a+b*b>c*c;

end;

/////////////////////////////////////

function tgtu(a,b,c:longint):boolean;

begin

tgtu:=a*a+b*b<c*c;

end;

////////////////////////////////////

function demvuong():qword;

var i,j:longint;

kq:qword;

begin

for i:=1 to n-1 do

for j:=i+1 to n do

inc(d[a[i]*a[i]+a[j]*a[j]]);

kq:=0;

for i:=1 to n do

kq:=kq+d[a[i]*a[i]];

demvuong:=kq;

end;

/////////////////////////////////////

function demnhon():qword;

var i,j,d,c:longint;

kq:qword;

begin

kq:=0;

for i:=1 to n-2 do

begin

d:=i+2;

c:=i+2;

for j:=i+1 to n-1 do

begin

while (c<=n) and OK(a[i],a[j],a[c]) do

c:=c+1;

demtg:=demtg+c-j-1;

while (d<=n) and tgnhon(a[i],a[j],a[d]) do

Trang 9

assign(f,fi);

reset(f);

readln(f,n);

for i:=1 to n do

read(f,a[i]);

close(f);

for i:=1 to n-1 do

for j:=i+1 to n do

if a[i]>a[j] then

begin

tg:=a[i];

a[i]:=a[j];

a[j]:=tg;

end;

demtg:=0;

demtgvuong:=demvuong();

demtgnhon:=demnhon();

demtgtu:=demtg-demtgvuong-demtgnhon;

assign(f,fo);

rewrite(f);

write(f,demtgnhon,' ',demtgvuong,' ',demtgtu);

close(f);

END

C++

#include <bits/stdc++.h>

using namespace std;

ifstream fi;

ofstream fo;

int d[200000001];

long long demtg=0;

int i,n;

int a[5001];

bool OK(int a, int b, int c)

{

return (a+b>c);

}

bool tgnhon(int a, int b, int c)

{

return (a*a+b*b>c*c);

}

long long demvuong()

{

long long kq,i,j;

for (i=1;i<=n-1;i++)

for (j=i+1;j<=n;j++)

d[a[i]*a[i]+a[j]*a[j]]++;;

kq=0;

for (i=1;i<=n;i++)

kq=kq+d[a[i]*a[i]];

return kq;

}

Trang 10

long long demnhon()

{

long long kq=0;

int i,j,d,c;

for (i=1;i<=n-2;i++)

{

d=i+2;

c=i+2;

for (j=i+1;j<=n-1;j++) {

while (c<=n && OK(a[i],a[j],a[c]))

c++;

demtg=demtg+c-j-1;

while (d<=n && tgnhon(a[i],a[j],a[d]))

d++;

if (d-1<=c)

kq=kq+d-j-1;

} }

return kq;

}

int main()

{

long long nhon,tu,vuong;

fi.open("CAU5.INP");

fi>>n;

for (i=1;i<=n;i++)

fi>>a[i];

fi.close();

sort(a+1,a+1+n);

vuong=demvuong();

nhon=demnhon();

tu=demtg-vuong-nhon;

fo.open("CAU5.OUT");

fo<<nhon<<' '<<vuong<<' '<<tu;

fo.close();

return 0;

}

Các chương trình trên, có cả chương trình mình lấy của thí sinh được full điểm.

Các bộ test không phải là test chấm chính thức mà chỉ là test mình tạo để mọi người tham khảo Bài 1 code pascal 1 cách, code C++ lại là cách khác nhưng cách nào cũng full điểm.

Ngày đăng: 17/03/2021, 15:30

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w