Tải bản đầy đủ (.doc) (8 trang)

Đề thi học sinh giỏi tin thành phố hà nội lớp 12 năm 2010

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 (88.66 KB, 8 trang )

Đề thi học sinh giỏi Tin thành phố Hà Nội Lớp 12 năm 2010 - 2011
Bài 1: Đèn nhấp nháy
Trong dịp đại lễ 1000 năm thăng long hà nội, An quan sát thấy nhiều đèn nhấp nháy được trang trí
trên các đường phố. Vốn là một học sinh yêu thích môn tin học và vật lý. An quyết định tự tạo một dây
đèn nhấp nháy đặc biệt. Dây đèn của An gồm n bóng nối tiếp nhau, đánh số thứ tự từ 1 đến n và được điều
khiển theo nguyên tắc: Bắt đầu từ thời điểm 0 tất cả các bóng đèn đều ở trạng thái tắt, bóng thứ i sẽ lóe
sáng và các thời điểm ti, 2 ti, 3 ti (i=1,2, ,n). An chờ đợi và muốn biết thời điểm nào mà cả n bóng đều
cùng lóe sáng.
Ví dụ t1 = 4 thì tại các thời điểm 4, 8 , 12 , 16, 20 bóng đèn 1 lóe sáng, t2=6 thì tại các thời điểm 6, 12,
18, 24, 30 bóng đèn 2 sẽ lóe sáng. Như vậy, thời điểm 12 sẽ là thời điểm sớm nhất mà cả 2 bóng đèn đều
cùng lóe sáng.
Yêu cầu: Cho t1, t2, tn, hãy giúp An tính thời điểm sớm nhất mà tất cả n bóng đều lóe sáng.
Dữ liệu: Vào từ file văn bản Bai1.INP có dạng:
- Dòng đầu tiên chứa số nguyên dương n (2 <= n <= 30)
- Dòng thứ hai chứa n số nguyên dương t1, t2, tn (ti <= 10^6).
Kết quả: Ghi ra file văn bản Bai1.Out thời điểm sớm nhất mà tất cả n bóng đèn đều lóe sáng.
Ví dụ
Bai1.INP:
2
4 6
Bai1.OUT
12
Bài 2:
Mật khẩu
Một xâu ký tự được gọi là mật khẩu "an toàn" nếu xâu có độ dài ít nhất = 6 và xâu chứa ít nhất một chữ cái
in hoa ('A' 'Z'), một chữ cái thường, một chữ số.
Ví dụ: 'a1B2C3', 'tinHoc6' là hai mật khẩu "an toàn", còn 'a1B2C', 'a1b2c3', 'A1B2C3', 'tinhoc' đều không
phải là mật khẩu "an toàn".
Một lần, Bình nhìn thấy một xâu S, chỉ gồm các loại ký tự: chữ cái in hoa, chữ cái thường và chữ số. Bình
muốn tự kiểm tra khả năng đoán nhận mật khẩu bằng cách đếm xem có bao nhiêu cặp chỉ số (i,j) thỏa mãn
đkiện: 1 <=i<j<=length(s) và xâu con gồm các ký tự liên tiếp từ i đến j của S là mật khẩu "an toàn".


Yêu cầu: Cho xâu S, tính số lượng cặp chỉ số (i,j) thỏa mãn điều kiện nêu trên.
Dữ liệu: Vào từ file văn bản Bai2.INP gồm một dòng chứa xâu S có độ dài không quá 100.
Kết quả: Ghi ra file văn bản Bai2.OUT một số nguyên là số lượng cặp chỉ số (i,j) tính được.
Ví dụ:
Bai2.INP
abc3456789PQ
Bai2.OUT
6
Ví dụ 2:
Bai2.INP
abc123
Bai2.OUT
0
Bài 3: Bàn cờ
Cho một bàn cờ kích thước m x n ô, các dòng được đánh số từ 1 đến m từ trên xuống dưới, các cột được
đánh số từ 1 đến n từ trái qua phải. Ô nằm ở vị trí dòng i và cột j của lưới được gọi là ô (i,j) và khi đó, i
được gọi là chỉ số còn j được gọi là chỉ số cột của ô này. Được phép đặt một quân vua vào một ô của bàn
cờ (mỗi ô đặt không quá một quân), khi đó nó có thể khống chế 8 ô lân cận xung quanh (8 ô được đánh số
từ 1 đến 8, xem hình vẽ dưới đây).
1 2 3
8 x 4 (x là quân hậu)
7 6 5
Trên bàn cờ đã đặt trước một số quân vua (không có 2 quân nào khống chế nhau), người ta muốn đặt thêm
nhiều nhất các quân vua lên bàn cờ mà vẫn đảm bảo không có 2 quân vua nào khống chế nhau.
Yêu cầu: Cho biết các ô đã đặt quân vua, hãy đặt thêm nhiều nhất quân vua lên bàn cờ sao cho trên bàn cờ
không có 2 quân nào khống chế nhau.
Dữ liệu: Vào từ file văn bản Bai3.INP có dạng
- Dòng đầu tiên chứa 3 số nguyên m,n,k (0<m , n < 30; 0 <=k<=m mx n). Trong đó m,n là kích thước bàn
cờ, k là số quân vua đã được đặt trên bàn cờ.
- Dòng thứ i trong k dòng tiếp theo gồm 2 số ai ,bi là chỉ số dòng và chỉ số cột của ô thứ i đã có quân vua.

Kết quả: Ghi ra file văn bản Bai3.OUT có dạng:
- Dòng đầu tiên ghi số nguyên s là số lượng nhiều nhất quân vua được đặt thêm lên bàn cờ.
- Dòng thứ i trong s dòng tiếp theo gồm 2 số xi, yi là chỉ số dòng và chỉ số cột của quân vua thứ i được đặt
thêm lên bàn cờ (nếu có nhiều phương án đưa ra một phương án bất kỳ).
Ví dụ:
Bai3.INP
2 3 0
Bai3.OUT
2
1 1
2 3
Ví dụ 2
Bai3.INP
3 3 1
2 2
Bai3.OUT
0
Được sửa bởi vzic lúc 17:15 ngày 16-10-2010
Quote
16-10-2010 17:10 #2
Heroboss12
View Profile
View Forum Posts
Visit Homepage
Registered User
Tham gia
26-12-2008
Bài viết
41
Like

0
Thanked 1 Time in 1 Post
Bài này có vẻ như là tìm bội chung nhỏ nhất của n số t1,t2 tn. vzic còn bài 2 bài 3 gì đó post luôn đi.
Thanked 0 Times in 0 Posts
Bài 2 : Xâu S chỉ có 100 ký tự nên ta vét cạn
Function kiemtra(i,j:integer);
Var ct,ch,cs:Boolean;
k:integer;
Begin
ct:=false;
ch:=false;
cs;=false;
For k:=i to j do
Begin
Case a[k] of
'A' 'Z':ch:=true;
'a' 'z':ct:=true;
'1' '9':cs:=true;
End;
End;
If ct and cs and ch then kiemtra:=true;
End;
BEGIN
For i:=1 to length(S)-5 do
For j:=i+5 to length(S) do
Begin
If Ktra(i,j) then dem:=dem+1;
End;
END;
Quote

Mọi người xem hộ em bài 3 cái
không hiểu sao với các test nhỏ (n,m<20) thì các toạ độ được viết xuống dòng, còn lại thì nó lại write trên
cùng 1 dòng. đây là code bài 3 của em
{$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+}
{$M 16384,0,655360}
program bai3;
uses crt;
var dd:array[1 30,1 30] of boolean;
m,n,i,j,k:integer;a,b:byte;
tong:integer;
f,g,f1:text;
procedure put(i,j:byte);
var p:byte;
begin
dd[i,j-1]:=false;
dd[i-1,j]:=false;
dd[i,j+1]:=false;
dd[i+1,j]:=false;
dd[i-1,j+1]:=false;
dd[i+1,j-1]:=false;
dd[i+1,j+1]:=false;
dd[i-1,j-1]:=false;
dd[i,j]:=false;
end;
procedure nhap;
var x:byte;f:text;
begin
tong:=0;
assign(f,'bai3.inp');
reset(f);

readln(f,m,n,k);
for i:=1 to m do
for j:=1 to n do dd[i,j]:=true;
for x:=1 to k do
begin
read(f,i,j);
put(i,j);
end;
close(f);
end;
procedure tinh;
var dem:integer;
begin
for i:=1 to m do
for j:=1 to n do
if dd[i,j] then
begin
put(i,j);
inc(tong);
end;
end;
procedure tinh2;
var dem:integer;
begin
for i:=1 to m do
for j:=1 to n do
if dd[i,j] then
begin
writeln(f,i,' ',j);
put(i,j);

end;
end;
BEGIN
assign(f,'bai3.out');
rewrite(f);
nhap;
tinh;
writeln(f,tong);
nhap;
tinh2;
close(output);
END.
Thank trước
Quote
22-10-2010 16:24 #5
noel_trang
View Profile
View Forum Posts
Registered User
Tham gia
11-02-2010
Bài viết
39
Like
1
Thanked 0 Times in 0 Posts
hi, mình cũng vừa thi xong (đc 16.5 điểm)
bài 3 nếu làm như cách của bạn thì ko đúng hoàn toàn đâu.
VD: input:
4 13 5

1 5
2 2
2 8
2 11
2 13
output: nếu làm theo cách của bạn thì kq là 6, nhưng thực tế phải là 7.
Bài 1 bạn làm thế nào? Với 50% test lớn thì cách tìm ucln có vẻ ko khả thi. Nhưng cũng ko thể phân tích
thành thừa số nguyên tố vì phải dùng TP.
Quote
Posts
thế theo bạn bài 3 làm như thế nào. mình chỉ dùng đánh dấu toàn bộ mảng bằng 1 mẳng đánh dấu 30*30,
sau đó nhập tử tệp, đặt những con vua vào ô, sau đó duyệt toàn bộ những ô còn lại thôi.
Còn bài 1 thì theo mình là phải phân tích số, chứ làm bcnn=tích/ucln thì có vẻ ko khả thi lắm. vì nếu test
cho toàn số nguyên tố thì chạy khá lâu.
Bài 3: đặt vào ô nào kiểm soát đc ít ô nhất.
uses crt;
const
fi='banco.i12';
fo='banco.o12';
nm=31;
x:array[1 8] of shortint=(-1,0,1,-1,1,-1,0,1);
y:array[1 8] of shortint=(-1,-1,-1,0,0,1,1,1);
var f:text;m,n:byte;k:word;a,b:array[0 nm,0 nm] of byte;d:word;
tx,ty:array[1 nm*nm] of byte;
procedure nhap;
var i:word;j,u,v:byte;
begin
assign(f,fi);reset(f);
readln(f,m,n,k);fillchar(a,sizeof(a),0);
for i:=1 to k do

begin
readln(f,u,v);
for j:=1 to 8 do
a[u+x[j],v+y[j]]:=2;
a[u,v]:=1;
end;
close(f);
end;
procedure timmin(var im,jm:byte);
var i,j,k:byte;min:byte;
begin
fillchar(b,sizeof(b),0);min:=255;im:=0;jm:=0;
for i:=1 to m do
for j:=1 to n do
if a[i,j]=0 then
begin
for k:=1 to 8 do
if (i+x[k]>0) and (i+x[k]<=m) and (j+y[k]>0) and (j+y[k]<=n) and (a[i+x[k],j+y[k]]>=0) then
inc(b[i,j]);
if b[i,j]<min then
begin
min:=b[i,j];im:=i;jm:=j;
end;
end;
end;
procedure xuli;
var im,jm,k:byte;
begin
d:=0;
repeat

timmin(im,jm);
if (im=0) then break;inc(d);tx[d]:=im;ty[d]:=jm;
a[im,jm]:=1;for k:=1 to 8 do a[im+x[k],jm+y[k]]:=2;
until false;
end;
procedure xuat;
var i:word;
begin
assign(f,fo);rewrite(f);
writeln(f,d);
for i:=1 to d do
writeln(f,tx[i],' ',ty[i]);
close(f);
end;
begin
nhap;xuli;xuat;
end.

×