Thầy kính yêu!
Kể từ năm lớp 7, con có được vinh dự được học cùng thầy. Từ ngày đó cho đến nay, tuy khoảng thời gian là chưa dài - 1 năm - nhưng con luôn có cảm giác đã được gắn bó cùng thầy từ rất lâu rồi!
Kể ra, ngày con được cùng thầy học buổi học đầu tiên cũng khá thú vị thầy nhỉ? Chỉ ít ngày trước khi bắt đầu năm học mới, con đã tham gia trận cầu nảy lửa trên sân bóng ở trường cùng các bạn. Và sau trận cầu ấy, chắc thầy cũng biết hậu quả rồi, là con bị gãy tay trái.
Nhưng con lại không muốn bỏ lỡ buổi học đầu tiên cùng thầy, thế là con đã nhờ mẹ chở con đến chỗ học. Khi gặp con, thầy cũng hơi bất ngờ một chút, rồi thầy mới cười bảo con: “À cái ông gãy tay này ấy hả? Thầy biết rồi” và đón con vào lớp. Thật là một buổi học lập trình đáng nhớ với con!
Thầy ạ, thời gian đầu đối với con thật là khó khăn. Con mới chỉ nắm sơ sơ kiến thức lập trình – thế là kém hơn các bạn được thầy dạy hơn một tháng. Đã thế, con còn “chấp một tay” gõ bàn phím trong suốt hơn ba tháng tiếp theo. Con tự nhủ: “Phải tìm cách để bắt kịp và vượt lên so với các bạn!”.
Những bài toán thầy đã chữa, con đều cố gắng ghi nhớ và làm lại theo cách của thầy. Nếu không, đôi khi chỉ từ những gợi ý của thầy, con sẽ về nhà tự tìm hiểu, từ đó giải đúng những bài toán con đang mắc kẹt. Chẳng hạn như, con vẫn còn nhớ ngày con chưa biết sử dụng hàm pair<int,int>, lúc ấy, thầy bảo: “Bài này phải dùng pair cơ, các bạn chưa biết đâu”. Thế là ngay khi về tới nhà, con đã lên mạng tìm kiếm ngay về hàm ấy và giải thành công bài tập.
Không chỉ dừng lại đó, bên cạnh những bài tập của thầy, con còn làm thêm ở trên những trang web lập trình cạnh tranh uy tín trên thế giới, như Codeforces, Codechef, AtCoder… để luyện tập thành thạo hơn những kiến thức mà thầy đã dạy.
Từ việc chỉ dừng lại ở ngưỡng điểm ba chữ số trước khi được học cùng thầy, giờ đây con đã có được số điểm trên 1.500 như để chứng tỏ cho sự tiến bộ của mình. Để rồi từ đó mà con đã lên trình, không những đuổi kịp các bạn, mà còn vượt hơn cả các bạn và Hè vừa rồi, con rất vinh dự khi được thầy “nhấc” lên học cùng các anh chị lớp 9.
Ảnh minh họa ITN. |
Chính nhờ thầy mà con có thể thấy được sự muôn màu muôn vẻ của lập trình cạnh tranh. Cũng giống như Toán học, lập trình cạnh tranh có rất nhiều cách để giải bài toán, từ chặn nhị phân, quy hoạch động, quay lui, đồ thị, cấu trúc dữ liệu… và một bài toán cũng có rất nhiều cách giải khác nhau. Không chỉ dừng lại tại đó, lập trình còn có cả giới hạn thời gian - thời gian cho phép để chương trình có thể chạy, khiến cho nhiều cách làm, tuy đúng, nhưng lại mất quá lâu để chạy phần mềm cũng coi như là sai.
Chính nhờ điều này đã khiến lập trình khó hơn toán học: Không phải bất cứ phương pháp đúng nào cũng sẽ vượt qua giới hạn thời gian và được chấp nhận.
Sau khi giải rất nhiều bài lập trình, con cũng có thể tự vạch ra trong đầu của mình một số phương pháp nhất định với mỗi giới hạn số: Nếu như n≤20 thì thường cách làm sẽ là phương pháp quay lui, nếu như n≤100 thì cách làm lại là lồng 3 vòng lặp vào với nhau, n≤〖10〗^5 thì cách làm lại cải tiến xuống phương pháp chặn nhị phân, hay nếu như n≤〖10〗^18, hay một tỉ tỉ, thì chắc chắn sẽ là một quy luật, một công thức nhất định được rút ra từ đề bài…
Không chỉ dừng lại tại đó, con còn học được sự kiên trì từ việc giải những bài toán lập trình cạnh tranh.
Tuy công thức chung để xác định cách làm bài toán lập trình đơn giản là vậy, nhưng đối với một số bài toán lập trình cạnh tranh cụ thể, công thức ấy bỗng trở nên không còn đúng nữa. Các bài toán ấy hoàn toàn có thể áp dụng nhiều cách làm mà trên lí thuyết sẽ vượt quá giới hạn thời gian, nhưng lại có sự nhận xét tinh tế để bỏ qua những trường hợp mà chương trình biết chắc chắn sẽ không giúp tạo nên kết quả tốt hơn.
Để tìm ra những nhận xét tinh tế ấy là một sự kiên trì và nỗ lực không ngừng đến từ bản thân. Nói đâu xa, chỉ mới đây thôi, cách làm của con tuy chỉ có 3 vòng lặp lồng nhau nhưng lại vượt quá giới hạn thời gian của đề bài. Tuy nhiên, điều khiến con sốc chính là cách làm chuẩn của bài: Tuy có tới 4 vòng lặp lồng nhau, nhưng nhờ những nhận xét tinh tế nên bài làm được chấp nhận.
Trong suốt hơn một năm qua, con đã được học từ thầy rất nhiều điều mới mẻ. Tuy nhiên, vẫn còn đó trước mắt con là một biển kiến thức bao la đang chờ được khám phá. Con sẽ quyết tâm học tập thật chăm chỉ hơn nữa để bồi bổ kiến thức, làm hành trang cho mình khi tham gia những thử thách lập trình cùng ước mơ bay xa.