đề thi giúp cho các bạn có thêm tài liệu để ôn tập đề thi giúp cho các bạn có thêm tài liệu để ôn tập đề thi giúp cho các bạn có thêm tài liệu để ôn tập đề thi giúp cho các bạn có thêm tài liệu để ôn tập đề thi giúp cho các bạn có thêm tài liệu để ôn tập đề thi giúp cho các bạn có thêm tài liệu để ôn tập
Trang 1Đề 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)
Trang 27 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
Trang 316-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
Trang 4cù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);
Trang 5end;
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
Trang 6Bà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
Trang 7Bà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);
Trang 8if (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