You are on page 1of 5

Thử-Sai

1. Lý thuyết
1.1. Vector nghiệm (x1, x2,…,xn )
1.2. Phương pháp
Thử Sai
Liệt kê các trường hợp Kiểm tra trường hợp
(Thủ tục) (Hàm kiểm tra, đánh giá)
1.3. Độ phức tạp
Số trường hợp thử x Chi phí kiểm tra
2. Ví dụ:
Cho dãy số nguyên a1, a2, …, an (|ai| <= 109) và một số nguyên S (S<=109), thực hiện các yêu cầu sau:
2.1. Đếm số lượng dãy con liên tiếp của dãy trên có số phần tử lớn hơn 3 và tổng các phần tử bằng S.
2.2. Chọn 3 phần tử trong dãy mà tích ba phần tử lớn nhất.
2.3. Liệt kê tất cả các cách chọn một tâp hợp các số trong dãy để tổng các số trong tập hợp được chọn
bằng S.
2.1.
Cách 1. (N^3)
For i,
For j
test(i,j) ) O(N)
Cách 2. Nếu lưu sum[i] trước thì test(i,j) có O(1) => O(N^2)
Cách 3.
For j => O(n)
{i} = Find(Sum[j] – S) sao cho sum[i] = Sum[j] – S. Tìm nhanh thì cần sắp xếp, sau đó tìm nhị
phân O(logn). Như vậy cần sắp xếp trước O(nlogn)
=> O(2nlogn).
2.2. Chọn 3 phần tử trong dãy mà tích ba phần tử lớn nhất.
C1. O(N^3)
For i
Forj
For k

1
C2. O(n)
Chọn 3 pt lớn nhất và 3 pt bé nhất => O(6n)
Tổ hợp chập 3 của 6 phần tử trên.
2.3. Liệt kê tất cả các cách chọn một tâp hợp các số trong dãy để tổng các số trong tập hợp được chọn
bằng S.
Cách 1.
Thử: Sinh nhị phân => O(2^n)
Test: O(n)
Cách 2.
1
2
3
1 2 3 4 5 6
1 T,0
2 T,0 T,0 T,1
3 T,0 T,0 T,0,1 T,1 T,2 T,3

3. Bài tập
3.1. 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 bằng 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 (‘a’..’z’), một chữ số (‘0’..’9’).
• 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”.
• Yêu cầu: Cho xâu S có độ dài không quá 〖10〗^6, đếm xem có bao nhiêu cặp chỉ số (i,j) thỏa
mãn điều 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”.
• Ví dụ:
abc3456789PQ  6
abc123  0

2
abc3456789PQ
abc3456789P
bc3456789PQ
bc3456789P
c3456789PQ
c3456789P
C1. O(n^3)
For i
For j
Test(i,j)
C2. O(n^2)
Lưu suml[i], sumu[i] và sumn[i] trước.
Test(i,j) => O(1)
C3.
id 1 2 3 4 5 6 7 8 9 10 11 12 13
s a b c 3 4 5 6 7 8 9 P Q
nearestaz 13
nearestAZ 13
nearest09 13

1
4
11
3.2. DÂY DẪN
Cho n đoạn dây điện (1<= n <= 105). Đoạn dây i có độ dài li cm (0< li <= 109). Cần phải cắt các đoạn đã
cho thành các đoạn sao cho có được k đoạn dây bằng nhau có độ dài nguyên. Có thể không cần cắt hết
các đoạn dây đã cho. Mỗi đoạn dây bị cắt có thể có phần còn thừa khác 0.
Yêu cầu: Xác định độ dài lớn nhất của đoạn dây có thể nhận được. Nếu không có cách cắt thì đưa ra số
0.
Dữ liệu: file WIRES.INP:
- Dòng đầu tiên chứa hai số nguyên n k.
- Dòng thứ i trong n dòng sau chứa số nguyên li.

3
Kết quả: Đưa ra file WIRES.OUT, kết quả trên 1 dòng dưới dạng số nguyên.
Ví dụ:
4 11  200.
802
743
547
539

3.3. BÀI TOÁN QUAY LUI VÉT CẠN


3.3.1. BÀI TOÁN SINH TỔ HỢP.
3.3.2. BÀI TOÁN SINH CHỈNH HỢP LẶP.
3.3.3. BÀI TOÁN SINH CHỈNH HỢP KHÔNG LẶP.
3.3.4. BÀI TOÁN SINH HOÁN VỊ.
3.3.5. BÀI TOÁN NGƯỜI DU LỊCH.
3.3.6. XẾP 8 HẬU KHÔNG ĂN NHAU.
3.4. DSEQ
Cho dãy số nguyên A gồm n phần tử a1, a2 …, an. Tìm cặp chỉ số i, j thỏa mãn:
 (a1 + a2 + …+ ai ) – (aj + aj+1 + … + an )  đạt giá trị lớn nhất (1≤i<j≤n).
(2<=n<=10^5), (|ai|< 10^9)
Ví dụ:
5  13 3 4 (max, i, j)
1 -2 3 -4 -7
3.5. SỐ NGUỒN
3.6. HÌNH VUÔNG TRÊN MẶT CẦU
3.7. LUCKY NUMBERS
3.8. LẬT XU.
3.9. PHẦN THƯỞNG 2.
3.10. DÃY SỐ
3.11. WMT
3.12. KHU VUI CHƠI
3.13. VÉ XE MIỄN PHÍ

4
= = HẾT = =

You might also like