Một số bài toán cần nắm trong tin học
Topic này đc mở ra cho tất cả những ai thích lập trình, không phân biệt già trẻ. Em nhỏ thì học hỏi, mấy anh lớn thì truyền kinh nghiệm nhá :x
|
Ðề: Một số bài toán cần nắm trong tin học
Một bài toán về dãy số
Trích:
|
Ðề: Một số bài toán cần nắm trong tin học
Bài toán này có 1 cách làm đơn giản là dùng 2 biến chạy i,j với j>=i. Với mỗi cặp i,j ta kiểm tra xem đoạn con liên tiếp từ phần tử thứ i đến phần tử thứ j có thỏa điều kiện <=M hay ko, nếu thỏa thì tính độ dài và cập nhật để thu đc độ dài đoạn con dài nhất.
Code:
kq:=0; {biến kq lưu độ dài lớn nhất tìm được, ban đầu gán kq=0} Nhưng với cách làm này rõ ràng không quan trọng a[i] âm hay dương, nhưng đề bài lại cho dãy số dương, nên ta có một cách làm khác có thể tăng tốc hơn rất nhiều. Cách này sẽ đc post sau :D |
Ðề: Một số bài toán cần nắm trong tin học
Đây là code của em, nếu thíu xót hay tối tăm chỗ nào nhờ anh góp ý :teeth_smile:
Code:
Begin |
Ðề: Một số bài toán cần nắm trong tin học
Bài này đã test thử trong pascal chưa.
A nghĩ là ko đúng vì biến T chỉ toàn cộng vào....nói chung là nhìn ko có lý lắm. |
Ðề: Một số bài toán cần nắm trong tin học
dạ rồi ạ, khi T tăng vọt quá m thì nó dừng lại ngay, không lố đâu :D
|
Ðề: Một số bài toán cần nắm trong tin học
Bài của em sẽ sai trong trường hợp khi cộng đến số thứ n mà tổng vẫn <=M, thì j sẽ tăng lên tiếp. Do pascal mặc định các số ban đầu của mảng =0, nên biến j sẽ chạy đến giá trị (j=n) và độ dài max có thể lên đến (n+2) => vô lý :D
Cám ơn sự hợp tác của pác An :x Tuy nhiên cách này chỉ giải đc với n<=1000. Có ai nghĩ ra cách giải quyết với n<=100 000 chưa |
Ðề: Một số bài toán cần nắm trong tin học
Trích:
|
Ðề: Một số bài toán cần nắm trong tin học
Em thấy giới hạn n cao quá liệu có ai nhập nổi để test? :teeth_smile:
|
Ðề: Một số bài toán cần nắm trong tin học
Trích:
|
Ðề: Một số bài toán cần nắm trong tin học
Trích:
|
Ðề: Một số bài toán cần nắm trong tin học
Thường người ta thao tác trên file, sẽ có 1 chương trình chấm kết quả đc xuất ra từ file output. Nhưng đối với riêng bài này, vì lười viết trình chấm nên anh đã để output là duy nhất :D.
|
Ðề: Một số bài toán cần nắm trong tin học
hehe em non mà , thank các anh nhìu :D
|
Ðề: Một số bài toán cần nắm trong tin học
Cách tốt hơn để giải quyết bài này có độ phức tạp O(N), dựa vào tính chất dãy số dương.
Xét dãy con liên tiếp kết thúc tại j, gọi i là vị trí xa nhất về bên trái sao cho đảm bảo điều kiện tổng từ i đến j <=M. Giả sử đã tìm đc một cặp (i,j) nào đó. Ta nhận xét: "Với mỗi cặp (x,y), nếu (y>j) thì chắc chắn (x>=i)". Vd ta xét vị trí j, ta tìm đc i tương ứng của nó. Vì i là vị trí xa nhất sao cho tổng [i,j]<=M nên ta chắc chắn tổng từ [i-1,j]>M. Vậy với (j+1) ta chỉ cần kiểm tra điều kiện tổng từ i đến (j+1) <=M, nếu thỏa thì tiếp tục tăng j, nếu ko thì tăng i lên đến khi thỏa. Code:
getmax:=low(longint); {gán biến getmax bằng giá trị nhỏ nhất của kiểu longint} |
Ðề: Một số bài toán cần nắm trong tin học
đoạn code ở trên nhìn thì thấy 2 vòng lặp lồng nhau, nhưng thực chất vòng for sẽ gán cho biến j các giá trị từ 1 đến n, vòng while gán cho i các giá trị từ 1 đến n. Mỗi giá trị 1 đến n chỉ xuất hiện 1 lần trong biến i và j, nên thuật toán có độ phức tạp O(2N) ~ O(N)
|
Ðề: Một số bài toán cần nắm trong tin học
thêm một bài nữa, bài này là một ứng dụng của bài trên kia :wink_smile:
Trích:
|
Ðề: Một số bài toán cần nắm trong tin học
Bài mới đây
Trích:
|
Ðề: Một số bài toán cần nắm trong tin học
Code:
program chocolate; |
Ðề: Một số bài toán cần nắm trong tin học
bài em bị quá thời gian. Nếu S = 10^9 thì phải duyệt đến 5.10^8 => quá thời gian
|
Ðề: Một số bài toán cần nắm trong tin học
Đây là đáp án của bài chocolate
Trích:
|
Ðề: Một số bài toán cần nắm trong tin học
Vài bài ôn tập cho HSG vòng 1 cấp tỉnh ngày mai.
Trích:
|
Ðề: Một số bài toán cần nắm trong tin học
Bài 1) lấy bài của anh đưa em rồi dùng hàm val chuyển chuỗi thành số, sau khi sắp xếp xong thì biến số về chuỗi lại đc hok?
|
Ðề: Một số bài toán cần nắm trong tin học
Đáp án đây
Trích:
Trích:
Trích:
|
Ðề: Một số bài toán cần nắm trong tin học
Đây là đoạn code tách chuỗi số từ chuỗi ban đầu
Code:
procedure tachso; |
Ðề: Một số bài toán cần nắm trong tin học
Đề về tới đây:
1) (7d) Một số nguyên dương n được gọi là số song tố khi n vừa là số nguyên tố và tổng các chữ số của n cũng là số nguyên tố (VD: 29 là số song tố thì 29 là số nguyên tố, tổng 2+9=11 là số nguyên tố). Viết chương trình nhập vào một chuỗi gồm: ký tự, số và khoảng trắng. a)Đếm xem trong chuỗi có bai nhiu số nguyên tố. b) Tính tổng các số song tố trong chuỗi. 3) (6d) Một máy rút tiền ATM có chứa các tờ giấy bạc mệnh giá 100,200,500,1000,2000,5000. Viết chương trình nhập vào số tiền N là bội số của 100 để máy sẽ cho ra số tờ giấy bạc là ít nhất. VD: 37600 máy sẽ cho ra 7 tờ 5000+ 1tờ 500+ 1 tờ 100. |
Ðề: Một số bài toán cần nắm trong tin học
Bổ sung thêm bài 2 Cấp tỉnh vòng 1 nè
Cho một mảng kích thước m*n chứa các số nguyên.Một ngưới xuất phát từ cột 1 đi dến cột n(bắt đầu từ ô nào của cột 1 cũng được).Quy tắc: từ ô A[i,j] chỉ có thể đi đến một trong các ô A[i,j+1], A[i+1,j+1], A[i-1,j+1].Nếu xuất phát từ ô ở dòng i=1 thì chỉ đuợc di chuyển sang ô A[i,j+1] hoặc ô A[i+1,j+1], nếu xuất phát từ ô ở dòng i=m thi chỉ được sang các ô A[i-1,j+1] hoặc ô A[i,j+1].Hãy tìm vị trí xuất phát và đường đi từ cột 1 sang cột n sao cho tổng các số ghi trên đường đi là lớn nhất. Dữ liệu vào từ tệp bai2.inp: dòng đầu ghi 2 so m,n lần lượt là số dòng và số cột. các dòng tiếp theo ghi các số trên đường đi. Dữ liệu ra ghi trong tep bai2.out: n dòng đầu ghi tọa độ đường đi từ cột 1 đến cột n dòng cuối ghi tổng lớn nhất tìm được. VD: inp 4 5 1 2 3 4 9 6 3 2 7 4 2 5 7 5 3 4 2 3 4 7 out 2 1 3 2 3 3 2 4 1 5 34 |
Múi giờ GMT +7. Hiện tại là 04:12 AM. |
Website sử dụng phần mềm vBulletin phiên bản 3.6.8
do Công ty TNHH Jelsoft giữ bản quyền từ 2000 - 2024.
Hội CHS Lê Quý Đôn-Long An giữ bản quyền nội dung của website này