Chữ số thứ I đợc gắn một số nguyên dơng aI đợc gọi là trọng lợng của nã thø tù c¸c ch÷ sè trong phÇn ®Çu cña m· tÝnh tõ tr¸i qua ph¶i.. Ngêi ta lÊy lÇn lît c¸c ch÷ sè trong m· nh©n víi t[r]
Trang 1SỞ GD&ĐT NGHỆ AN
(Đề thi cú 03 trang)
KỲ THI CHỌN HỌC SINH GIỎI CẤP TỈNH LỚP 12
NĂM HỌC 2010 – 2011
Mụn thi: TIN HỌC LỚP 12 THPT - BẢNG B
Thời gian làm bài: 180 phỳt
B i 1 ài 1 : (5.5 điểm) tần số
Cho dẫy số nguyên dơng, số lần xuất hiện của một số đợc gọi tần số của số nguyên đó Hãy tìm số nguyên dơng có tần số cao nhất và tần số tơng ứng của nó
Dữ liệu vào: Cho từ file văn bản MAX.INP bao gồm:
Dòng đầu tiên chứa một số nguyên N( 1≤ N ≤ 10000) là số lợng các số nguyên trong dãy
Mỗi dòng trong N dòng tiếp theo chứa số nguyên M( 1≤ M ≤ 1000) trong dãy
Kết quả: Ghi ra file văn bản MAX.OUT, gồm 2 số nguyên viết trên một dòng,
số thứ nhất ghi số nguyên có tần số cao nhất, số thứ 2 là tần số của nó( trong tr ờng hợp có nhiều số nguyên có tần số cao nhất bằng nhau, hãy đa ra số nguyên nhỏ nhất
và tần số của nó) Hai số cách nhau một ký tự trắng
9
1
2
5
6
3
7
2
5
2
2 4 6 7 7 2 4
2 2
Bài 2: (5.5 điểm) Mã Số
Để tiện trong công tác quản lý, một công ty đã gắn mã số cho các nhân viên của mình Mã số của mỗi nhân viên bao gồm bảy chữ số( gọi là phần đầu của mã nhân viên) và một chữ cái in hoa nối phía sau Chữ cái này đợc tính toán từ bảy chữ
số phần đầu của mã theo các bớc nh sau:
1 Chữ số thứ I đợc gắn một số nguyên dơng aI đợc gọi là trọng lợng của nó( thứ tự các chữ số trong phần đầu của mã tính từ trái qua phải) Ngời ta lấy lần
l-ợt các chữ số trong mã nhân với trọng lợng tơng ứng của nó
2.Cộng tất cả các kết quả
3 Tìm số d của phép chia tổng trên cho số nguyên dơng K ( 1≤ K ≤ 11)
4 Mỗi số d tơng ứng với một chữ cái in hoa Chữ cái in hoa tơng ứng tìm đợc
là chữ cái nối phía sau của mã nhân viên
Cho trớc phần đầu của mã nhân viên, hãy tìm chữ cái in hoa nối phía sau
Dữ liệu vào: Từ file văn bản MASO.INP có cấu trúc nh sau:
Dòng đầu tiên ghi số nguyên dơng K
Dòng thứ 2 ghi một xâu gồm 7 chữ số là phần đầu của mã nhân viên
Dòng thứ 3 ghi 7 số nguyên dơng, số thứ I là trọng lợng của chữ số thứ I trong phần đầu của mã Các số cách nhau một ký tự trắng
Dòng cuối cùng ghi một xâu có độ dài Kgồm các chữ cái tiếng Anh in hoa, chữ cái thứ I tơng ứng với số I-1 là số d của phép chia của tổng tìm đợc cho K
Kết quả: Ghi ra file văn bản MASO.OUT, chứa chữ cái tìm đợc.
Ví dụ:
Đề chớnh thức
Trang 211 6830907
2 7 6 5 4 3 2 JABCDEFGHIZ
D
Bài 3: (4.5 điểm) Sa mạc
Sa mạc là lới ô vuông cấp MxN ( 1≤ N,M ≤ 100) Trên mỗi ô của lới ngời ta ghi một số nguyên a( 1≤ a ≤ 100) đợc gọi là năng lợng của ô đó Một con lạc đà
đang ở ô (i,j) của lới chỉ đợc đi đến một trong hai ô (i+1,j) hoặc ô (i,j+1) Lạc đà đi
đến ô nào thì hấp thụ đợc nguồn năng lợng tại ô đó Hãy tìm cho lạc đà một đờng đi
từ ô (1,1) đến ô (M,N) theo nguyên tắc trên và hấp thụ đợc nhiều năng lợng nhất
Dữ liệu vào: Từ file văn bản SAMAC.INP, dòng đầu tiên thi 2 số nguyên
d-ơng theo thứ tự M, N
Dòng thứ I trong M dòng tiếp theo ghi N số nguyên dơng, số thứ J là năng l-ợng trên ô (I , J) của sa mạc.( số thứ tự của các số trên một dòng tính từ trái qua phải)
Kết quả: Ghi ra file văn bản SAMAC.OUT, dòng đầu tiên ghi số S là năng
l-ợng mà lạc đà hấp thụ đợc Từ dòng thứ 2 trở đi mỗi dòng ghi 2 số nguyên dơng là toạ độ các ô theo thứ tự trên đờng đi của lạc đà
Ví dụ:
4 5
1 5 1 3 4
6 7 9 1 5
1 1 8 4 1
1 3 4 3 3
41
1 1
2 1
2 2
2 3
3 3
3 4
4 4
4 5 Cả hai file dữ liệu, các số trên một dòng cách nhau một ký tự trắng
Bài 4: (4.5 điểm) Hội trại
Nhân dịp ngày thành lập công ty, ban Giám đốc công ty X tổ chức cho cán
bộ công nhân viên một cuộc hội trại Thời điểm tính trong ngày hội trại là phút, thời
điểm ban đầu là 0 Công ty có N cán bộ công nhân viên Ngời thứ I có mặt tại hội trại từ thời điểm aI đến thời điểm bI Hãy lập trình giải quyết các công việc sau đây:
1 Tìm cho ban Giám đốc một thời điểm sớm nhất đến thăm hội trại để gặp đợc nhiều cán bộ nhất
2 Tìm một khoảng thời gian dài nhất tại địa điểm hội trại không có ai cả, nếu
có nhiều khoảng thời gian nh thế hãy đa ra khoảng thời gian sớm nhất
Dữ liệu vào: Từ file văn bản: HOITRAI.INP, có cấu trúc nh sau:
Dòng đầu tiên ghi số N là số cán bộ của công ty ( ( 1≤ N ≤ 10000)
Dòng thứ I trong N dòng tiếp theo ghi 2 số nguyên dơng aI và bI là khoảng
thời gian có mặt tại hội trại của cán bộ thứ I
Kết quả: Ghi ra file văn bản HOITRAI.OUT nh sau:
Dòng đầu tiên ghi số T là thời điểm ban Giám đốc đến thăm hội trại
Dòng thứ 2 ghi 2 số nguyên a, b là khoảng thời gian từ a đến b không có ai ở hội trại Nếu không tìm đợc ghi số 32675 hai lần
Cả hai file dữ liệu, các số trên một dòng cách nhau một ký tự trắng
Ví dụ:
7
1 320
400 1000
351 1200
623
321 350
Trang 3380 1336
452 1430
512 1230
623 1105
Hết
-Họ và tên thí sinh ……… Số báo danh
………
Chú ý: - Chơng trình giải các bai1, bài 2, bài 3, bài 4 lần lợt ghi lên đĩa với các tên Bai1.pas; Bai2.pas; Bai3.pas; Bai4.pas.
Trang 4Bài 1:
const fi='Max.inp';
fo='max.out';
var a:array[1 1000] of integer; n,m,i,d,so:integer;
f:text;
begin
assign(f,fi);
reset(f);
readln(f,n);
d:=0;
so:=0;
for i:=1 to n do
begin
readln(f,m);
inc(a[m]);
end;
for i:=1 to m do
if a[i]>d then
begin
d:=a[i];
so:=i;
end;
close(f);
assign(f,fo);
rewrite(f);
writeln(f,so,' ',d);
close(f);
end
B i 2: ài 2:
const fi='MASO.INP';
fo='MASO.out';
var
t: array[1 7] of byte;
d: array[0 10] of char;
k: integer;
f: text;
s,s1: string;
tong,i,c,n,du: integer;
procedure doc;
begin
assign(f,fi);
reset(f);
readln(f,k);
readln(f,s);
for i:=1 to 7 do
read(f,t[i]);
Trang 5readln(f);
for i:=0 to k-1 do
read(f,d[i]);
close(f);
end;
function kq: char;
begin
tong:=0;
for i:=1 to length(s) do
begin
s1:=s[i];
val(s1,n,c);
tong:=tong+n*t[i];
end;
du:=tong mod k;
kq:=d[du];
end;
begin
doc;
assign(f,fo);
assign(f,fo);
rewrite(f);
write(f,kq);
close(f);
end
Bài 3:
program SA_mac;
const
f1 ='samac.inp';
fo ='samac.out';
var
a : array[1 100,1 100] of integer;
b : array[0 100,0 100] of longint; m,n,i,j : integer;
f : text;
{==============================}
procedure khoi_tao;
begin
assign(f,f1);
reset(f);
readln(f,m,n);
for i:=1 to m do
begin
for j:=1 to n do
read(f,a[i,j]);
readln(f);
end;
close(f);
Trang 6fillchar(b,sizeof(b),0);
end;
{=============================}
procedure xu_ly;
begin
for i:=1 to m do
for j:=1 to n do
if b[i,j-1]>b[i-1,j] then
b[i,j]:=a[i,j]+b[i,j-1]
else
b[i,j]:=a[i,j]+b[i-1,j];
end;
{==============================}
procedure thong_bao;
var
dd : array[1 2,1 199] of integer;
k : integer;
begin
assign(f,fo);
rewrite(f);
writeln(f,b[m,n]);
i:=m;
j:=n;
k:=m+n-1;
while (i>=1) and(j>=1) do
begin
dd[1,k]:=i;dd[2,k]:=j;
dec(k);
if b[i,j-1]>b[i-1,j] then
j:=j-1
else
i:=i-1;
end;
for i:=1 to m+n-1 do
writeln(f,dd[1,i],' ',dd[2,i]);
close(f);
end;
{======= chuong trinh chinh =============} BEGIN
khoi_tao;
xu_ly;
thong_bao;
END
Bài 4:
program hoi_trai;
const
f1 = 'hoitrai.inp';
fo = 'hoitrai.out';
Trang 7a : array[0 1439] of integer; max_cuoi,n : integer;
max_dau,t_diem : integer;
f : text;
{===================================}
procedure khoi_tao;
var
i,j,t1,t2 : integer;
begin
fillchar(a,sizeof(a),0);
assign(f,f1);
reset(f);
readln(f,n);
for i:=1 to n do
begin
readln(f,t1,t2);
for j:=t1 to T2 do
inc(a[j]);
end;
close(f);
end;
{=====================================}
procedure cau1;
var
i,max : integer;
begin
max:= a[0];
t_diem:=0;
for i:=1 to 1439 do
if a[i]>max then
begin
max:=a[i];
t_diem:=i;
end;
end;
{======================================} procedure cau2;
var
i,j,dem,dau,cuoi: integer;
begin
i:=1;
max_dau:=32675;
max_cuoi:=32675;
while i<=1439 do
if a[i]<>0 then
inc(i)
else
begin
Trang 8dau:=i;
j:=i;
while (a[j]=0) and (j<=1439) do
inc(j);
if j-i>max_cuoi-max_dau then
begin
max_cuoi:=j-1;
max_dau:=i;
end;
i:=j;
end;
writeln('dau =',max_dau,' cuoi= ',max_cuoi);readln; end;
{====================================}
procedure thong_bao;
begin
assign(f,fo);
rewrite(f);
writeln(f,t_diem);
writeln(f,max_dau,' ',max_cuoi);
close(f);
end;
{=========== CHUONG TRINH CHINH==========}
BEGIN
khoi_tao;
cau1;
cau2;
thong_bao;
END