[r]
Trang 1Sở Giáo Dục & Đào Tạo NGhệ an
TRờng THPT DTNT Quỳ HợP học sinh giỏi tỉnh lớp 12 THPT Kỳ thi chọn đội tuyển dự thi
năm học 2011 - 2012
Môn thi: tin học
Hình thức thi: Thực hành
Thời gian: 180 phút (không kể thời gian giao đề)
Bài 1: (7 điểm): Rút gọn xâu
Cho một xâu s chỉ gồm các chữ cái in thờng và độ dài tối đa 250 kí tự Em hãy viết chơng trình tạo ra xâu sg từ xâu s bằng cách xóa các kí tự liên tiếp giống nhau trong xâu s và chỉ
để lại một kí tự đại diện trong đoạn đó
Dữ liệu vào: Từ file văn bản xaugon.inp chứa xâu s chỉ gồm các chữ cái in thờng.
Kết quả ra: Ghi ra file văn bản xaaugon.out là xâu sg tìm đợc.
VD:
hhooocccssiinnnhhh hocsinh
Bài 2: ( 7 điểm): Gía trị lặp
Cho trớc dãy số n số nguyên a1, a2, …an không giảm và 2 chỉ số i,j (1ijn)
Hãy tìm số lần lặp lại nhiều nhất của các số trong dãy ai, …, aj
Dữ liệu: Vào từ file văn bản DAYSO.INP gồm:
- Dòng đầu tiên chứa số nguyên n
- Dòng thứ 2 chứa dãy số a1, a2, …an
- Dòng thứ 3 chứa 2 số i và j
(Các số trên một dòng cách nhau ít nhất 1 dấu cách trống)
Kết quả: Ghi ra file văn bản DAYSO.OUT có:
- Dòng đầu tiên chứa số lần lặp lại nhiều nhất của các số trong dãy a1, a2, …an
- Dòng thứ 2 chứa số lần lặp lại nhiều nhất của các số trong dãy ai, …, aj
Ví dụ:
10 -1 -1 1 1 1 1 3 10 10 10
5 10
4 3
Hạn chế 1n100, -10000 ai 10000 với i {1,…,n}
Trang 2Bài 3: (6 điểm) Bang nhac
Tại một quầy băng đĩa ngời ta ghi các bài hát theo băng khi khách hàng chọn bài hát thứ
i trong băng thì phải quay băng để bỏ qua i-1 bài hát trớc đó Thời gian quay băng bỏ qua mọi bài hát trớc đó và thời gian phát bài hát đó là nh nhau Trung bình mỗi lợt khách đến các bài hát trong băng đợc họ lựa chọn là nh nhau Giả sử băng của chủ quán có dung l-ợng ghi vừa đủ N bài hát, với mỗi bài hát họ biết dung ll-ợng mỗi bài hát phát ra Hỏi chủ quán phải ghi các bài hát vào băng nh thế nào để cho tổng thời gian quay băng trong mọi lợt khách đến là nhanh nhất?
Dữ liệu vào: Từ file văn bản bannghac.inp nh sau:
- Dòng đầu tiên là số N(1<=N<=100) thể hiện số lợng bài hát
- Dòng thứ 2 là N số nguyên N, mỗi số là thời gian phát mỗi bài hát
Kết quả ra: Ghi vào file văn bản bangnhac.out nh sau:
- Dòng đầu tiên ghi tổng số thời gian phát băng đó nếu mỗi bài hát đợc phát một lần
- N dòng tiếp theo, mỗi dòng ghi 2 số nguyên là thứ tự bài hát và thời gian tìm và phát bài hát đó
VD:
Họ và tên thí sinh: Số báo danh:
Sở Giáo Dục & Đào Tạo NGhệ an
TRờng THPT DTNT Quỳ HợP học sinh giỏi tỉnh lớp 12 THPT Kỳ thi chọn đội tuyển dự thi
năm học 2010 - 2011
Đáp án và biểu điểm Chấm Môn: tin học
-Bài 1: (7 điểm):
bangnhac.inp bangnhac.out
3 2 6 10 1 5 1
2 3
1 6
3 12
4 22
Trang 3program rutgon;
var i,n:integer; f1,f2:text; s,sg:string;
procedure xuli;
begin
assign(f1,'rg.inp');reset(f1);
assign(f2, 'rg.out');rewrite(f2);
while not eof(f1) do
begin
readln(f1,s);
sg:=' '; n:=length(s);
for i:=1 to n do if s[i]<>s[i+1] then sg:=sg+s[i];write(f2,sg);
end;
close(f1);close(f2);end;
begin xuli; end
Bµi 2: ( 7 ®iÓm)
Const fi='dayso.inp'; fo='dayso.out';
var f:text; n,id,jd,max1,max2:integer; a:array [1 100] of byte; procedure readfile;
var i:integer;
begin assign(f,fi); reset(f); readln(f,n); end;
procedure process;
var i,j,x,y,k:integer;
begin
fillchar(a,sizeof(a),0);
i:=1; max1:=0; max2:=0; read(f,x); k:=0;
if n=1 then begin k:=1; a[1]:=1;
end
else while i<n do
begin
j:=1; inc(i); read(f,y);
while (y=x) and (i<n) do begin inc(j); read(f,y); inc(i) end;
if i=n then
if y=x then inc(j) else begin a[k+2]:=1; end;
x:=y; inc(k); a[k]:=j;
if a[k+1]=1 then inc(k);
end;
read(f,id); read(f,jd);
for i:=1 to k do
if a[i]>max1 then max1:=a[i];
for i:=1 to k do
if id<>0 then if a[i]<id then
begin id:=id-a[i]; a[i]:=0; end
else begin a[i]:=a[i]-id+1; id:=0; end;
jd:=n-jd+1;
for i:=k downto 1 do
if jd<>0 then if a[i]<jd then
begin jd:=jd-a[i]; a[i]:=0; end
else
begin a[i]:=a[i]-jd+1; jd:=0; end;
for i:=1 to n do
if a[i]>max2 then max2:=a[i];
close(f); end;
procedure writeresult;
begin
assign(f,fo); rewrite(f);writeln(f,max1); writeln(f,max2);close(f);end; begin readfile; process;writeresult; end
Bµi 3: (6 ®iÓm)
const fi='bangnhac.inp'; fo='bangnhac.out';
var a,b:array[1 100] of integer; j,n,i,s,t:integer; f,g:text;
procedure nhap;
begin
assign(f,fi); reset(f); readln(f,n);
for i:=1 to n do
Trang 4begin b[i]:=i; read(f,a[i]); end;
close(f);end;
procedure sx;
var tg:integer;
begin
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;
tg:=b[i]; b[i]:=b[j]; b[j]:=tg;
end;
end;
procedure tong;
begin
s:=0; t:=0;
for i:=1 to n do begin s:=s+a[i]; t:=t+s; end;
end;
begin
nhap; sx; tong; s:=0;
assign(g,fo); rewrite(g); writeln(g,t);for i:=1 to n do begin s:=s+a[i]; writeln(g,b[i],' ',s); end; close(g); end