BTC tuyên bố: sử dụng đề của MB làm đề chính thức của đợt 3, mọi người làm nhanh lên nhé
BTC tuyên bố: sử dụng đề của MB làm đề chính thức của đợt 3, mọi người làm nhanh lên nhé
Có lẽ để 1 hôm nào đó tui sẽ post 1 đề ..... hi vọng nó sẽ làm đề chính thức của đợt 4 hay 5 gì đóDạo này ít vào forum quá
ủa, không ai làm bài đợt 3 vì ... dễ quá à. thôi nhé, coi như trên chỉ là đóng góp cho đề đợt 3. Đợt 3 chưa có đề chính thức. Mời AE đóng góp đề bài
Hì, em bận quá không code được.![]()
![]()
. Em xin đóng góp 1 đề, dễ thôi :
Cho một số độ dài không quá 1000 chữ số, từ số này ta tạo ra một số nguyên bằng cách chọn ra một số các chữ số thuộc số này và viết liền nhau (giữ nguyên thứ tự). Hãy tìm số nhỏ nhất không tạo ra được từ số này
Ví dụ :
1230 => số nhỏ nhất không tạo được là 4
1234567890 => số nhỏ nhất không tạo được là 11. (Do 10 tạo thành từ 1 và 0)
11223344556677889900 => Đáp án : 21
Dữ liệu : File SO.INP 1 dòng duy nhất chứa số ban đầu
Kết quả : File SO.OUT 1 dòng duy nhất chứa kết quả.
![]()
![]()
![]()
![]()
Được sửa bởi pineflower lúc 11:29 ngày 08-03-2007
đề khó hiểu quá, hic hic
cực kì khó hiểu, hichic
Thía này: cho một số có 1000 chữ số, ta có thể tạo ra số mới = cách xóa đi các chữ số trong 1000 chữ số đó. Vấn đề đặt ra là nếu xóa đi các chữ số đó bằng mọi cách thì những số nào sẽ không tạo ra được, vd dãy 123 nếu xóa đi bất kỳ số nào hay xóa tất đều ko thể tạo được số 4, 5, 6... và trong những số đó chọn ra số nhỏ nhất.
- Thực ra bài này thuật toán ko khó, mảng 2 chiều, 1000 cột và 2 dòng. Dòng đầu ghi các chữ số, dòng 2 ghi các giá trị true/false. Mặc định là false.
- Đầu tiên ta search xem có chữ số nào từ 0->9 ko có trong dãy ko. Nếu ko => nhảy bước tiếp, nếu có => in chữ số đó ra và kết thúc.
- Từ đây bắt đầu vòng lặp. Ta lựa chữ số đầu tiên, duyệt hết 1000 chữ số với số thử từ 1->9. Ta chọn chữ số 1 đầu tiên, bỏ hết các chữ số đằng trước nó, rồi thử tìm đằng sau nó có chữ số nào từ 0->9 ko có trong dãy ko. Nếu có => in chữ số được chọn và chữ số ko xuất hiện ra rồi kết thúc. Nếu ko => bỏ chữ số được chọn, tiếp tục thử chọn chữ số đằng sau nó xem sao.
- Ta có thể chắc chắn số tìm được nhiều nhất là 2 chữ số:
cho dãy 123543322....894230
thì giả sử các chữ số đằng trước đều ko chọn được, ta có thể chọn 2 chữ số sau cùng của dãy: 30 từ đó suy ra số nhỏ nhất ko viết được là 31.
Bookmarks