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

Đề thi khảo sát đội tuyển HSG lớp 12 môn tin học

10 786 2

Đ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 206 KB
File đính kèm Code_VA_Test.rar (3 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

ĐỀ THI KHẢO SÁT HỌC SINH GIỎI CẤP TỈNH LỚP 12

Môn thi: Tin học

Thời gian làm bài: 180 phút

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ả Bài 1 CẮT CHỮ VI TÍNH BAI1.* BAI1.INP BAI1.OUT

Bài 2 NGÔN NGỮ MUMBA BAI2.* BAI2.INP BAI2.OUT

Bài 3 CẶP ĐÔI HOÀN HẢO BAI3.* BAI3.INP BAI3.OUT

Bài 5 ĐẾM DÃY CHIA HẾT BAI5.* BAI5.INP BAI5.OUT

Dữ liệu vào là đúng đắn, không cần phải kiểm tra Các số trên một dòng ghi cách nhau một dấu cách.

Hãy lập trình giải các bài toán sau:

Bài 1 CẮT CHỮ VI TÍNH

Trong kỳ thi học sinh giỏi toàn tỉnh năm 2018, ban tổ chức có ý định in vi tính số báo danh của từng thí sinh, sau đó dán lên từng bàn vi tính để các em biết vị trí ngồi của mình Chữ số vi tính là các số 0,1,2,3,4,5,6,7,8,9 được in ra trên các miếng đề can và dán được lên mặt bàn Số báo danh của thí sinh được kết hợp từ các chữ số vi tính đó, ví dụ số báo danh 168 được kết hợp từ 3 chữ số là 1,6, và 8 Số báo danh của

thí sinh được đánh từ 1 đến n, trong đó n là số thí sinh tham gia Số lượng chữ số vi tính được in ra càng

nhiều, kinh phí càng lớn, do đó ban tổ chức muốn biết tổng số chữ vi tính sẽ được in ra vừa đủ để sử dụng cho

n thí sinh Ví dụ: nếu có 13 thí sinh tham dự thì các số báo danh cần đánh là 1,2,3,4,5,6,7,8,9,10,11,12,13, như

vậy cần dùng đến 17 chữ số vi tính

Yêu cầu: hãy giúp ban tổ chức tính toán xem cần in ra bao nhiêu chữ số để đánh số báo danh cho n thí sinh.

Dữ liệu: Vào từ file BAI1.INP chứa duy nhất một số n (1 ≤ n < 109) là số thí sinh sẽ tham dự kỳ thi

Kết quả: Đưa ra file văn bản BAI1.OUT gồm 1 số duy nhất là tổng số chữ số vi tính cần in từ 1 tới n.

Ví dụ:

BAI1.INP BAI1.OUT

Bài 2: NGÔN NGỮ MUMBA

Mỗi từ trong ngôn ngữ của bộ tộc Mumba là một xâu kí tự hình thành chỉ từ hai kí tự a và b theo quy tắc

sau:

 Không chứa 2 kí tự b liên tiếp

 Không có 3 từ con giống nhau đứng liên tiếp trong một từ, như vậy aaa không phải là một từ Mumba (có 3 từ con a liên tiếp), aabababa cũng không phải là một từ Mumba (có 3 từ con ab liên tiếp), còn

aba là một từ Mumba.

Yêu cầu: Cho n xâu kí tự, mỗi xâu chỉ gồm các kí tự chữ cái tiếng anh (‘a’ ’z’), có độ dài không quá 25 kí tự Hãy đếm xem trong n xâu đã cho thì có bao nhiêu xâu là một từ trong ngôn ngữ Mumba.

Dữ liệu vào: vào từ file văn bản BAI2.INP gồm:

 Dòng đầu ghi hai số nguyên dương n (n ≤ 100).

 N tiếp theo, mỗi dòng ghi một xâu kí tự.

Kết quả: ghi ra file văn bản BAI2.OUT gồm 1 số duy nhất là số lượng từ Mumba đếm được.

Trang 2

BAI2.INP BAI2.OUT 3

aabababa cba abaa

1

Bài 3: CẶP ĐÔI HOÀN HẢO

Nhân dịp năm mới Mậu Tuất 2018, đất nước XYZ muốn tuyển chọn một cặp đôi hoàn hảo để trình diễn màn khiêu vũ tuyệt đẹp vốn là văn hóa lâu đời của đất nước.

Một cặp đôi được gọi là hoàn hảo nếu cặp đôi đó có cả nam và nữ, chênh lệch chiều cao của hai người

không được vượt quá K milimet và chiều cao của người nữ không được cao hơn người nam.

Đất nước đã tuyển chọn được N vũ công gồm cả nam và nữ và muốn biết có bao nhiêu cách để chọn ra

đúng một cặp đôi hoàn hảo.

Yêu cầu: Tính xem có bao nhiêu cách để chọn ra đúng một cặp hoàn hảo, hai cặp khác nhau nếu có ít nhất 1

người được chọn ở cặp này mà không được chọn ở cặp kia.

Dữ liệu vào: vào từ file văn bản BAI3.INP gồm:

 Dòng đầu ghi hai số nguyên dương N, K (N ≤ 105; K ≤ 500).

 Dòng tiếp theo ghi N số là chiều cao hi của vũ công thứ i.

 Quy ước hi > 0 nếu đó là vũ công nam và hi ≤ 0 nếu là nữ |hi| ≤ 2000

Kết quả: ghi ra file văn bản BAI3.OUT gồm 1 số duy nhất là số lượng cách có thể chọn được.

Ví dụ:

4 2

1600 -1601 -1602 1603

4

Rằng buộc:

 Có 50% số test ứng với 50% số điểm của bài có N ≤ 104.

 Có 50% số test ứng với 50% số điểm của bài có 104 ≤ N và số vũ công nam không quá 104.

Bài 4 TÍNH TỔNG

Sau buổi học về số học, Minh đã biết cách tính tổng của n số tự nhiên liên tiếp Ở nhà, Minh tiếp tục làm các bài tập về tính tổng của các số tự nhiên liên tiếp Minh thắc mắc, liệu với số tự nhiên K thì có thể phân tích K thành tổng các số tự nhiên liên tiếp hay không? Ví dụ với K = 9 (có thể phân tích: 9 = 9; 9 = 5+4;

9 = 2 + 3 + 4) thì có 3 cách phân tích thành tổng các số tự nhiên liên tiếp.

Yêu cầu: Viết chương trình giúp Minh tìm số cách phân tích số nhiên K thành tổng các số tự nhiên liên tiếp.

Dữ liệu vào: Từ file văn bản BAI4.INP một dòng duy nhất chứa số nguyên dương K (K ≤ 1012).

Kết quả: Ghi ra file BAI4.OUT một số duy nhất là số cách phân tích tìm được.

Ví dụ:

Ràng buộc:

 Có 1/3 số test ứng với 1/3 số điểm của bài có K ≤ 107;

Trang 3

Bài 5 ĐẾM DÃY CHIA HẾT

Cho một dãy số nguyên dương, yêu cầu hãy đếm số lượng dãy con liên tiếp có tổng chia hết cho Hai dãy con được gọi là khác nhau nếu ít nhất một trong hai điểm đầu hoặc điểm cuối hai dãy con đó trong dãy đã cho là khác nhau Ví dụ với , dãy: có 4 dãy con thỏa mãn là

Với và dãy: (1, 1, 1, 1) thì có 4 dãy con thỏa mãn.

Dữ liệu: Vào từ file văn bản BAI5.INP gồm 2 dòng:

 Dòng đầu là 2 số nguyên dương d và N (d ≤ 106, N ≤ 105)

 Dòng thứ 2 chứa N số nguyên dương biểu diễn dãy số, các số trong dãy không quá 109

Kết quả: Ghi ra file văn bản BAI5.OUT gồm 1 số duy nhất là kết quả tìm được.

Ví dụ

4 6

2 1 2 1 4 1

4

Rằng buộc:

Có 1/3 số test tương ứng với 1/3 số điểm có N ≤ 103

 Có 2/3 số test tương ứng với 2/3 số điểm có 103 < N ≤ 105

Cán bộ coi thi không giải thích gì thêm.

Hết

Trang 4

-Bài 1: Viết bằng C++

#include<bits/stdc++.h>

using namespace std;

ifstream fi;

ofstream fo;

long long n,i,cs,m,d;

long long a[15],b[15];

int main()

{

a[1]=9;

b[1]=9;

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

{

a[i]=a[i-1]*10;

b[i]=a[i]*i;

}

fi.open("BAI1.INP");

fi>>n;

fi.close();

m=n;

d=0;

while (m>0)

{

d++;

m=m/10;

}

m=pow(10,d-1);

n=n-m+1;

cs=n*d;

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

cs=cs+b[i];

fo.open("BAI1.OUT");

fo<<cs;

fo.close();

return 0;

}

Trang 5

var y,x,n:int64;

procedure nhapdl;

begin

assign(input,'bai1.inp');

reset(input);

assign(output,'bai1.out');

rewrite(output);

readln(n);

end;

procedure xuli;

begin

if (n<10) then

write(n)

else

begin

if (n<100) then

write(9+(n-9)*2)

else

begin

if (n<1000) then

write(9+(99-9)*2+(n-99)*3)

else

begin

if (n<10000) then

write(9+90*2+900*3+(n-999)*4)

else

begin

if (n<100000) then

write(9+180+2700+(9000*4)+(n-9999)*5)

else

begin

if (n<1000000) then

write(9+180+2700+36000+(90000*5)+(n-99999)*6)

else

begin

if (n<10000000) then

begin

x:=9+90*2+900*3+9000*4+90000*5+900000*6;

write(x+(n-999999)*7)

end

else

begin

if (n<100000000) then

begin x:=9+90*2+900*3+9000*4+90000*5+900000*6+9000000*7; write(x+(n-9999999)*8)

end

else

begin x:=9+90*2+900*3+9000*4+90000*5+900000*6+9000000* 7+90000000*8;

y:=(n-99999999)*9;

write(x+y);

end;

end;

end;

end;

end;

end;

end;

end;

end;

Trang 6

nhapdl;

xuli;

close(input);

close(output);

end

Trang 7

using namespace std;

ifstream fi;

ofstream fo;

int i,n,dem;

string s;

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

bool kt(string s)

{

string a;

int i,j,k,n,m,d,p;

if (s.find("bb")!=-1)

return false;

n=s.size()-1;

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

if (s[i]!='a' && s[i]!='b')

return false;

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

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

a=s.substr(i,j-i+1);

a=a+a+a;

if (s.find(a)!=-1)

return false;

} return true;

}

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

int main()

{

fi.open("BAI2.INP");

fi>>n;

fi.ignore();

fo.open("BAI2.OUT");

dem=0;

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

{

getline(fi,s);

if (kt(s))

dem++;

}

fi.close();

fo<<dem;

fo.close();

return 0;

}

Trang 8

Bài 2: Viết bằng PASCAL

var

i,n,kq:longint;

s:array[0 100] of string;

procedure nhapdl;

begin

assign(input,'bai2.inp');

reset(input);

assign(output,'bai2.out');

rewrite(output);

readln(n);

for i:=1 to n do readln(s[i]);

end;

function kiemtra(i:longint):boolean;

var

j,k:longint;

s1,s2,s3:string;

begin

for j:=1 to length(s[i]) do

if (s[i][j]<>'a') and (s[i][j]<>'b') then exit(false);

for j:=1 to length(s[i])-1 do

if (s[i][j]='b') and (s[i][j+1]='b') then exit(false);

for j:=1 to length(s[i]) div 3 do

begin

for k:=1 to length(s[i])-3*j+1 do

begin

s1:=copy(s[i],k,j);

s2:=copy(s[i],k+j,j);

s3:=copy(s[i],k+j+j,j);

if (s1=s2) and (s1=s3) then exit(false);

end;

end;

exit(true);

end;

procedure xuli;

var

i,j:longint;

begin

kq:=0;

for i:=1 to n do

begin

if kiemtra(i) then

inc(kq);

end;

write(kq);

end;

begin

nhapdl;

xuli;

close(input);

close(output);

end

Trang 9

using namespace std;

#define ll long long

long long i,dem,k,n;

ifstream fi;

ofstream fo;

int main()

{

fi.open("BAI4.INP");

fi>>n;

fi.close();

fo.open("BAI4.OUT");

long long max = trunc(sqrt(8*n+1)-1)/2;

dem=1;

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

if((n-i*(i-1)/2)%i==0)

dem++;

fo<<dem;

fo.close();

return 0;

}

Bài 4: Viết bằng PASCAL

var

n,kq:int64;

procedure nhapdl;

begin

assign(input,'bai4.inp');

reset(input);

assign(output,'bai4.out');

rewrite(output);

readln(n);

end;

procedure cach1;

var

i,j:longint;

m:int64;

begin

kq:=0;

for i:=0 to n do

begin

m:=0;

for j:=0 to n do

begin

m:=m+i+j;

if m=n then kq:=kq+1;

if (m>n) then break;

end;

end;

write(kq);

end;

procedure xuli;

var

i:longint;

m:int64;

begin

kq:=0;

for i:=0 to trunc(sqrt(2*n)) do

begin

Trang 10

m:=i;

if (m*(m+1)>n*2) then break;

if (2*n mod (m+1)=0) and (((2*n div (m+1))-m) mod 2=0) then

inc(kq);

end;

write(kq);

end;

begin

nhapdl;

//cach1;

//writeln;

xuli;

close(input);

close(output);

end

Bài 3 và bài 5:

xem trong file đính kèm (có cả code bằng C++ và Pascal)

Ngày đăng: 11/11/2020, 14:27

TỪ KHÓA LIÊN QUAN

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

w