Bài toán
Vũ Văn Th o
Ta b t đ u b ng bài toán trong ch ng trình"Đ ng lên đ nh olimpia". ươ ườ
Bài toán 1. M t dãy g m 10 bóng đèn đ c đánhs t 1 đ n 10 tr ng thái t t. Ng i ượ ế ườ
ta thay đ i tr ng thái cácbóng đèn th o qui t c sau đây.
L n 1: thay đ i tr ng thái t t c các bóng đèn.L n 2: thay đ i tr ng thái các đèn có s
hi u chia h t cho 2. L n3: thay đ i tr ng thái các bóng đèn có s hi u chia h t cho 3. ế ế
C nh v y cho đ n l n th 10 thì thay đ i tr ng thái các bóng đèncó s hi u chia h t ư ế ế
cho 10.
H i nh ng bóng đèn có s hi u nào còn sáng?
Gi i. Khi th c hi n vi c thay đ i tr ng thái, m ts bóng đèn t t, m t s khác sáng. Do
đó trên dãy đèn đã chotr thành dãy đèn nh p nháy.
Tr c h t ta nh n xét r ng, sau 10 l n thay đ itr ng thái nh bài ra, nh ng bóng đènướ ế ư
có s l l n thay đ i s là bóng đèn còn sáng. Ký hi u S[k] là t p h p các s i,
1<=i<=1,sao cho i là b i c a k. Khi đó s l n k s thay đ i tr ng thái cácbóng đèn có
s hi u i thu c S[k], hay k là cc a i. Do đó s l n thay đ i t ng thái c a bóng đèn i ướ
b ng các cs T(i) c a i. ướ
Ta có th gi i b ng toán h c nh sau. Ta đã bi tr ng, n u: ư ế ế
+i=P1a1...pkak,trong đó p1,...,pk là các s nguyên t khác nhau;thì T(i)=(a1+1)...(ak+1). Do
đó n u i là s chính ph ng thì T(i) l ,còn các tr ng h p khác T(i) ch n. Suy ra cácế ươ ườ
bóng đèn có s hi u1, 4, 9 còn sáng. Các bóng đèn khác b t t.
+Ta có thu t toán nh sau. ư
-V i m i i, 1<= i<= 10 đ t T(i)=0
-Xét t t c k, 1<= k<= i, n u k là c c a i thì T(i)=T(i)+1 ế ướ
-N u T(i) l thì đèn T(i) sáng, n u T(i) ch n thì đèn T(i) t t.ế ế
1.Rõ ràng là v i s l ng bóng đèn n l n h n 10r t nhi u thì gi i b ng toán h c ượ ơ
không th xác đ nh đ c ngay s hi u bóng đèn còn sáng. Khi đó nh cách gi i quy t ượ ế
tr c ti p trênmáy tính ta s nhanh chóng xác đ nh đ c s hi u bóng đèn cònsáng. ế ượ
H n n a, n u s l n thay đ i tr ng thái là m b tkì thì cách gi i 2 càng thu n ti n h n.ơ ế ơ
Các b n t l p ch ng trình gi i bài toán 1 v in,m và tr ng thái ban đ u c a dãy bóng ươ
đèn là tuỳ ý. B n có th tham kho thêm thu t gi i bài toán 2.
Ta chuy n sang gi i bài toán " đèn nh p nháy"là bài toán ra trong kì thi Tion h c qu c
t l n th 10 (năm 1998 t iB Đào Nha)ế
Bài toán 2. Đèn cho ngày h i (PARTY)
Có N đèn màu đánh s tùe 1 đ n N và 4 nút thay đ itr ng thái c a chúng. n nút 1 thay ế
đ i tr ng thái các đèn; nnút 2 thay đ i tr ng thái các đèn có s hi u l ; n nút 3 thau
đ itr ng thái đèn có s hi u ch n; n nút 4 thay đ i các đèn có s hi u d ng 3k+1
(k>=0);
Có m t máy đ m C đ đ m t ng s các l n n núttrên. Ban đ u, t t c ác đèn đ u ế ế
sáng và C ch 0.
Yêu c u: Cho giá tr C và tr ng thái cu i cùng c am t s đèn. Hãy l p ch ng trình ươ
xác đ nh t t c các tr ng thái( có th có) cu i cùng c a N đèn t ng ng v i các thông ươ
tin đãcho.
D li u vào: T p PARTY.IN ch a 4 dòng. Dong 1 cho s N. Dòng 2 cho giá tr c a C.
Dòng 3 và 4 cho danh sách các đèn cótr ng thái cu i cùng t ng ng lad sáng hay t t. ươ
S hi u các đèntrong m i danh sách cách nhau m t d u cách và k t thúc b i s -1. ế
Víd t p PARTY.IN có d ng
10
1
-1
7
-1
đây s đèn là 10, ch n 1 nút và tr ngthái cu i cùng đèn 7 t t.
D li u ra: T p PARTY.OUT ch a t t c các tr ngkthái cu i cùng có th có (khác
nhau) c a các đèn. M i tr ng tháighi trên 1 dòng g m N kí t 0 và 1, trong đó 0 ng
v i đèn t t,còn 1 là đèn sáng. Th t các dòng tuỳ ý.
V i d li u vào nh trên t p PARTY.Out có d ng. ư
0000000000
0110110110
0101010101
H n ch : 0<= N<= 100, 1<= C<= 10000. S l ng các đèn sáng và đèn t t tr ng thái ế ượ
cu i cùng <= 2. D li u vào đ m b o có ít nh t 1 tr ng thái c a N đèn thoã mãn.
Gi i. Ta chia N đèn thành 4 nhóm không giao nhau:
+Nhóm 1 g m các đèn s hi u l và khác d ng 3k+1
+Nhóm 2 g m các đèn s hi u ch n và khác d ng 3k+1
+Nhóm 3 g m các đèn s hi u l có d ng 3k+1
+Nhóm 4 g m các đèn có s hi u ch n có d ng 3k+1
+Khi n nút 1 các đèn thu c t t c các nhóm thay đ itr ng thái.
+Khi n nút 2 các đèn thu c nhóm 1và 3 thay đ itr ng thái.
+Khi n nút 3 các đèn thu c nhóm 3 và 4 thay đ itr ng thái.
+Khi n nút 4 các đèn thu c nhóm 3 và 4 thay đ itr ng thái.
+Khi n m t nút b t kì các đèn trong 1 nhóm ho ccùng thay đ i tr ng thái ho c không.
Do đô ta ch c n xét 4 đènđ i di n cho 4 nhóm. H n n a, m t đèn b t kỳ không thay ơ
đ i tr ngthái n u s l n thay đ i tr ng thái c a nó ch n. Ng c l i, đèns thay đ i ế ượ
tr ng thái. Suy ra đ i v i m i nút ch c n xét 2 kh năng: s l n n nút ch n kí hi u 0
và s l n n nút l kí hi u1. Nh v y, ta ch càn xet 2 ư 4 =16 kh năng có th x y ra.
Ký hi u ON là t p các đèn sáng và OFF là t p cácđèn t t trong tr ng thái cu i cùng đã
cho, còn s là t p đèn sángtrong tr ng thái cu i cùng nào đó. Khi đó tr ng thái này th a
nh c n u thoã mãn (ON<=S) và (OFF<=[1..4]-S) ượ ế
Ta có ch ng trình Pascal đ y đ nh sau:ươ ư
Program Party;
Uses Crt;
Type t= Set Of 1..4
Var c,i1,i2,i3,i4,j,k,m,n:integer;
On,off,s:T;
X:Array [ 1..50 ] Of Integer;
Contr:Array [ 1..16 ] Of t;
Flag:Boolean;
Inp,outp:Text;
Procedure ReadData; { thu tuc nhap du lieu }
Begin
Assign(inp,'a:pasparty.inp');Reset(inp);
Readln(inp,a);Readln(inp,c);
On:=[];Read(inp,j);
While j<>-1 Do
Begin
If j mod 3 <>1 Then
If ođ(j) Then On:=On+[1] Else On:=On+[2]
Else If Ođ(j) Then On:=On+[3] Else On:=On+4;
Read(inp,j);
End;
If j=-1 Then Readln(inp);
Off:=[];readln(inp,j);
While j<>-1 Do
Begin
If j mod 3 <>1 Then
If ođ(j) Then off:=off+[1] Else off:=off+[2]
Else If Ođ(j) Then off:=off+[3] Else off:=off+4;
Read(inp,j);
End;
Close(inp);
End;
Procedure Solve {Thu tuc tim cac trang thai N den thoa man}
Begin
Asign(out,'a:pasparty.out');rewrite(out);
For i4:=0 To 1 Do
For i3:=0 to 1 Do
For i2:=0 To 1 Do
For i3:=0 To 1 Do
Begin
K:=i1+i2+i3+i4;
If (c>=k) Then
Begin
S:=[1..4];
For m:=1 To 4 Do
Case m Of
1:If Ođ(i1+i2) Then s:=s-[1];
2:If ođ(i1+i3) Then S:=S-[2];
3:If ođ(i1+i2+i4) Then S:=S-[3];
4:If ođ(i1+i3+i4) Then s:=s-[4];
End;
If (on<=s) and(off<=[1..4]-s) Then