Bài toán mệnh đề và biến đổi
Trang 1Mệnh đề và một số bài toán biến đổi
Lê Trần Hoài Nam
Cácbạn thân mến! Qua các cuộc thi, hẳnta đã tiếp xúc khá nhiều bài toán mang tính chất biến đổi trạng thái,để đưa trạng thái nguồn về trạng thái đích Lối giải quyết thườngmù tịt Để giải chúng, ta cần trải qua một số nhận xét, mà tôi tạmgọi là bổ đề Việc tìm ra mệnh đề bổ trợ sẽ soi sáng đường chochúng ta đi đến kết quả, có thể là chặt bớt nhánh trong một rừng tìmkiếm, có khi là tìm điều kiện tồn tại nghiệm, và đôi khi chúng còngiúp bạn đến cỡ 90% bài toán Chúng tra hãy cùng lướt qua một số vídụ
Bàitoán 1 : Lưới đèn (Đề toàn quốc 1995)
Đề:
1lưới đèn N*N bóng ,mỗi bóng có 2 trạng thái: sáng (1) và tắt (0) Vídụ 1 trạng thái của lưới với N=3
1 0 1
1 1 0
0 0 1
Mỗihàng và cột đều có 1 công tắc Khi ấn sẽ thay đổi trạng thái của tấtcả các bóng (0
→1, 1 → 0)trên hàng (cột) đó
Nhiệmvụ là phải biến đổi 1 trạng thái nguồn thành trạng thái đích qua 1số ít nhất S lần biến đổi
Dữliệu cho trong file ′battat.inp′ cho số N và trạng thái đầu A, trạngthái đích B, kết quả in
ra ở file ′battat.out′ gồm số S và các bướcbiến đổi Nếu không thể biến A thành B, S = -1
Vídụ:
Battat.inp 3
10 1
11 0
00 1
00 0
10 0
01 1
Battat.out
2
h1c2
Giải:
Trướchết ta có đưa ra vài bổ đề:
1/ số cách ấn mỗi cách tối đa là 1
2/ thứ tự các cách ấn là không quan trọng
3/ nếu A[i,j]=B[i,j] thì nếu cách nhấn hàng i song hành với cáchnhấn cột j (i=1 m,j=1 n) vàngược lại
Dođó ta sẽ phân hoạch được tập A={hàng 1, hàng 2, , hàng N, cột 1, cột2, ,cột N} thành
Trang 22 tập con (trong trường hợp có đáp án cho bài toán, tứcS ≠-1)
Tadễ dàng chứng minh điều này:
Tacó tất cả các cột dều phụ thuộc vào hàng 1, và tất cả các hàng dềuphụ thuộc vào cột 1
→ đpcm
Tasẽ lập 1 mảng 2 chiều C [1 2,1 N] với
c[1,i]=1 nếu hàng i thuộc tập hợp 1 và =2 nếu tuơng tự
c[2,i]=1 nếu cột i thuộc tập hợp 1 và =2 nếu tuơng tự
t[i]là số phần tử thuộc tập hợp i (i=1 2)
Ta xây dựng C bằng cách lần lượt so sánh tất cảcác phần tử của A và B theo thứ tự từ trên xuống, từ trái qua
Bước 1:
Bước 2 :
S:=max(t[1],t[2]); { lấy tập hợp nhiều phần tử nhất,
in ra tất cả ′h - ′i ( ′c - ′i) nếu những hàng (cột) thuộc tập nhiều phần tử nhất
(tập 1 hay tập 2) }
Baitoán 2 : Party Lamps (IOI 1998 tai Bồ Đào Nha)
Đề:
Để thắp sáng buổi dạ hội tại Cuộc thiOlympic Tin học quốc tế năm 1998, chúng ta có một bộ gồm N ngọn đènmàu đánh số từ 1 đến N Các ngọn đèn được nối với nhau bằng bốnnút:
nút 1
khibấm nút này, tất cả các ngọn đèn đều đổi trạng thái: các ngọnđèn đang ở chế độ ON sẽ chuyển thành OFF và tất cả các ngọn đènở chế độ OFF sẽ chuyển thành ON
nút 2
thayđổi trạng thái của tất cả các ngọc đèn mang số lẻ
nút 3
thayđổi trạng thái của tất cả các ngọn đèn mang số chẵn
nut 4
thayđổi trạng thái của tất cả các ngọn đèn được đánh số dạng 3K+1(với K≥0), ví dụ: 1,4,7,…
Cómột chiếc máy đếm C ghi lại tổng số lần bấm nút
Khi buổi dạ tiệc bắt đầu, tất cả các đèn đều ở trạng thái ON vàmáy đếm C được đặt ở 0
Bàitoán Cho trước giá trị đếm máy C ghi đượcvà thông tin trạng thái cuối cùng của một
số ngọn đèn Hãy viết chươngtrình xác định trạng thái cuối cùng có thể (không lặp lại) của Nngọn đèn theo thông tin cho trước
Input File PARTY.IN chứa bốn dòng: số ngọn đèn N, số lần bấm đèn C và trạng thái
Trang 3cuốicùng của một số ngọn đèn.
Dòng đầu tiên chứa số N và dòng thứ hai chứa giá trị cuối cùng máyđếm C ghi nhận Dòng thứ ba chứa số ngọn đèn ở trạng thái cuối cùnglà ON, các thông tin được ngăn cách bằng ký tự trống, cuối dòng cósố nguyên -1 Dòng thứ tư chứa số ngọn đèn ở trạng thái cuối cùnglà OFF, các thông tin cũng được ngăn cách bằng ký tự trống và kếtthúc bằng số nguyên -1
party.inp
10
1
-1
7 -1
Trong ví dụ này có tất cả 10 ngọn đènvà chỉ một nút đã được bấm Ngọn đèn số 7 ở trạng thái cuối cùnglà OFF
Output File PARTY.OUT phải chứa tất cả các trạng thái cuối cùng (không lặp lại) có thể
củatất cả các ngọn đèn Mỗi trạng thái phải được thể hiện trên mộtdòng riêng Các trạng thái có thể được sắp xếp tuỳ ý
Mỗi dòng có N ký tự trong đó ký tự đầutiên chỉ trạng thái của ngọn đèn số 1 và chữ số cuối cùng chỉ trạngthái của ngọn đèn N Số 0 chỉ ngọn đèn ở trạng thái OFF và số 1chỉ ngọn đèn ở trạng thái ON
Party.out 0000000000
0110110110
0101010101
Trong trường hợp này, các ngọn đèn cóthể ở ba trạng thái:
tất cả các ngọn đèn đều ở trạng thái OFF;
hoặc các ngọn đèn 1, 4, 7, 10 ở trạng thái OFF và các ngọn đèn 2, 3, 5, 6, 8, 9 ở trạng thái ON;
hoặc các ngọn đèn 1, 3, 5, 7, 9 ở trạng thái OFF và các ngọn đèn 2, 4, 6, 8, 10 ở trạng thái
ON
Ràngbuộc Các tham số N và C thỏa mãn điều kiện:10 ≤ N ≤ 100, 1 ≤C ≤10000
Số ngọn đèn có trạng thái cuối cùng là ON nhỏ hơn hoặc bằng 2
Số ngọn đèn có trạng thái cuối cùng là OFF nhỏ hơn hoặc bằng 2
Có ít nhất một trạng thái cuối cùng cho các ngọn đèn trong file chạythử
Giải:
ở bài này, ta cũng có nhận xét 1/ của bài 1 Nhận xétthứ 2 sau đây là quan trọng nhất: 2/ Với c>4, tồn tại 2 lần bấm giốngnhau trong c lần bấm
Bạn đọc dễ dàng chứng minh điều này
Như vậy, nếu c>4 thì nhấn c lần tươngđương với nhấn c-2 lần;
Cứ như vậy, ta sẽ đơn giản c>4 → c=3 hoặc c= 4 Ta có thể tính c đơn giản như sau: ifc>4 then c:= 4-c mod 2;
Tiếptục đơn giản c,với c nhận được(c≤4),ta sinh tất cả các tổ hợpchập Ai c, c-2, c-4 (chỉ lấy phần tử c-2,c-4 nếu chúng ≤0) phần tử từtập các cách nhấn A={1,2,3,4}
Vídụ với c=2, ta sẽ có các tập hợp Ai (i=1 T) với T là số tổ hợp tìmđược lần lượt là: {},{1,2},{1,3},{1,4},{2,3},{2,4},{3,4};
Nhưvậy, Tmax=Max{T(4),T(3),T(2),T(1)}= C 40+ C42 + C44 =1+6+1=8; một con số khá nhỏ?
Talập sẵn tất cả các tổ hợp các cách nhấn:
Trang 4A*={{},{1},{2},{3},{4},{1,2},{1,3},{1,4},{2,3},{2,4},{3,4},{1,2,3},{1,2,4},{1,3,4}, {2,3,4},{1,2,3,4}}
Vớimỗi Ai với |Ai|=c, ta lần lượt biến các bóng đèn đã cho trước trạngthái (ban đầu là toàn ON) xem có phù hợp hay không Nếu đúng, ta ghinhận
Bàitoán 3 : Xoayđồng hồ (Vô địch Hunggary 1991)
Đề:
Cho 9 cái đồng hồ,mỗi cái có 4 trạngthái chỉ giờ: 0,3,6,9 (hình 1) đánh số từ 1 đến 9 Cho 9 cách quay bộ đồng hồ như hình 2, dượcđánh số từ 1 đến 9 từ trên xuống, từ trái qua phải Các ô bôi đenxác định đồng hồ tương ứng sẽ quay kim giờ 1 góc 90 độ
Ví dụ cách chọn sẵn ở hình 2 gồm cácđồng hồ 1,2,4,5
Cho trước 1trạng thái của bộ đồng hồ, hãy xác lập 1 số ít nhất số lần biếnđổi để đưa tất cả các đồng hồ về 0 giờ
Trongfile dongho.inp gồm trạng thái của 9 cái đồng hồ (0 3 tương ứng0,3,6,9 giờ)
output
Trongfile dongho.out gồm:
- dòng đầu tiên là số lần biến đổi N
- N dòng tiếp theo lần lượt là số hiệu của các cách nhấn
ví dụ:
dongho.inp
1 0 1
2 1 1
01 3
dongho.out
9
1 1 3 3 4 6 7 7 7
Trang 5Giải:
Ta có thể vét cạn tất cả các cấu hình, trong trường hợp xấu nhất là 49 (khá nhỏ)
Tuy nhiên,ta có thể rútngắn thời gian tìm kiếm bằng 1 định lí:
Tồn tại duy nhất đúng 1 cách quay tất cảcác đồng hồ về 0 giờ
Thật vậy, với bổ đề sau, ta có thể dễ dàngchứng minh định lí
1/ thứ tự các cách nhấn là không quan trọng
2/ số cách nhấn mỗi cách tối đa là 3
3/ Từbất kì cấu hình nguồn nào, qua 1 số hữu hạn bước,ta đều đưa đưađược về cấu hình đích bất kì
C/m:
Trước hết, ta đưa ra 3 nhận định:
- Sốtrạng thái của bộ 9 đồng hồ là 49
- Nếugọi bộ cách biến đổi là ″tối giản″ nếu không có cách nào biếnquá 3 lần
thì ta sẽ có 49 bộ tối giản
- Từmột cấu hình bất kì A đều tồn tại 1 cách bộ tối giản C để đưa vềtrạng thái bất kì B c/m:
Ta lấy đồng hồ số 1 làm gốc, ta xét sự chênh lệch của 9 đồnghồ F với đồng hồ 1 (khi đó F[1] sẽ =0)
Độ chênh lệch là số góc vuông, theo thứtự vòng tròn cùng chiều kim đồng hồ, số 3 (9 giờ) đứng trước số0 (0 giờ)
Đầu tiên, ta tạo cho các đồng hồ cáckhoảng cách tương ứng với đồng hồ 1 độ lệch cố định nào đó (từ 0 đến 3) với cấu hìnhB, gọi là cấu hình D
ví dụ:
với B= 2 3 0
1 1 0
1 0 3
thì ta có thểđưa về: D= 1 2 3
0 0 3
0 3 2 { Mỗiđồng hồ thuộc D đều trễ hơn so với B 1 góc vuông }
bằng cách thayđổi từng khoảng cách của từng đồng hồ một bởi các tổ hợp cách:
Đồng hồ 1:2 4 9
-2 :1 2 3 4 5 6 8 8
-5 :2 4 6 8 1 9
tương tự cho cácđồng hồ còn lại
Sau khi đã cóD, ta lại xét các trường hợp khoảng cách D và B, dựa vào đó, tasẽ san bằng khoảng cáchgiữa B và D bằng tổ hợp biến đổi:
Kcách = 0: {}
-1: { 11 1 2 2 3 3 3 4 4 5 5 5 6 6 7 7 7 8 8 9 9 } (1) /* Ta sử dụng trình quay lui
để tính giùm bước này*/
-2: { 11 3 3 5 5 7 7 9 9 } (2) /* Ta gấp 2 và đơn giản cấu hình (1) */
-3: { 12 2 3 4 4 5 6 6 7 8 8 9 } /* ởđây ta cộng gộp đơn giản (1) và(2), rồi đơn giản */
Vậy là ta đã cócấu hình B, tập hợp tất cả các cách biến đổi trên lại thành tập E, đơngiản E
ta được C Bổ đề số 3 đã được chứng minh xong
Như vậy, ta có sựánh xạ song ánh từ tập 49 cách biến đổi đến 49cấu hình bộ đồng hồ Vậy tồn tại duynhất một cách biến đổi để đưa một cấu hình bất kì đến cấu hìnhđích (Toàn
Trang 60 giờ) (đpcm)
Bài toán 4 : Bài toán 3 bi(hay tắc kè đổi màu)
Đề:
Cho d viên biđỏ, v viên vàng, x viên xanh.(d,v,xthuộc N)
Hai viên bi khácmàu gặp nhau sẽ chuyển thành màu thứ 3 (ví dụ như hình 3) Hỏi có thểbiến tất cả thành 1 màu không Nếu có, hãy trình bày chi tiết các phépbiến đổi
Input:
Từ file 3bi.inp
Dòngđầu gồm v,x,d
Dòngtiếp theo gồm 1 trong 3 kí tự: ′v′,′x′,′d′ mô tả màu bi cầncuối cùng cần biến đổi
Output:
Trong file 3bi.out
Dòngđầu:1 nếu có thể biến tất cả thành một loại bi yêu cầu 0 nếu ngượclại
Trong trường hợp có phép biến đổi: inra quy luật biến đổi các viên bi gồm nhiều dòng theo kết cấu v x d (sốlượng bi vàng, xanh, đỏ qua mỗi lần biến đổi)
ví dụ:
3bi.inp
1 4 2
3bi.out
1
0 3 4
2 2 3
1 1 5
0 0 7
Đểđơn giản, ta giả sử cần biến tất cả các viên bi thành màu đỏ
Làm thế nào để biết có thể hay khôngđược? Ta lại tiếp tục xây dựng các mệnh đề
Mệnh đề:
Bài toán vô nghiệm khi và chỉ khi
C/m :
Thuận
Đảo
Trang 7Với (*) không xảy ra,ta tiến hành triệtbớt x và v, bằng cách biến xanh + vàng → 2 đỏ (**)
cho tới khi 1 trong 2 màu vàng, xanh =0;
Giả sử v=0, ta có 2 trường hợp:
- x=0, bàitoán đã giải quyết xong
- x≠ 0, ta tái tạo 1 v bằng cách kết hợp x và d tạo v.(***)
Do lúc này d ≠0, (từ (*), (**)) nên bước (***) luôn thực hiện được Và v=1 sau
bước(***) phải ≤ x (do v-x (trước (***))≥3)
Do vậy qua 1 số hữu hạn lần biến đổita sẽ có v=x=1
Sau đó, ta triệt tiêu xanh và vàng Vậylà bài toán đã giải quyết xong trọn vẹn
Các bạn thấy đấy,một bài toán có vẻrối mù, qua từng bước phân tích bằng bổ đề, đã đơn giản hơn rấtnhiều Có thể giải quyết khá nhẹ nhàng Ngoài ra việc tìm và chứngminh bổ
đề lại rất thú vị nữa
Chương trình cụ thể tôi xin không trìnhbày vì sự hạn hẹp của trang báo
Bài này chỉ dựa trên kinh nghiệm của riêngtôi Có thể nó hay hơn, hay dở hơn cách giải của các bạn Các bạn nàocó cách giải tổng quát hơn, hay hơn, hay cần source, hay mọi ý kiếnphê bình xin cho biết tại, trân trọng