AMA Session: Hỏi nghiệm thi Competitive Programming của Nguyễn Xuân Phúc

  • Tên: Nguyễn Xuân Phúc
  • nickname: nxphuc

About me:

  • Có kinh nghiệm thi HSG Quốc Gia, OLP SV Toàn quốc và ACM regional
  • Mình sẽ chia sẻ kinh nghiệm chuẩn bị và thi Competive Programming và các chủ đề liên quan đến Competive Programming. Các bạn đặt câu hỏi và Phúc sẽ sắp xếp trả lời vào cuối tuần.

Why AMA?

  • Do anh Đạt aka @ltd đề xuất
10 Likes

Cảm ơn Phúc đã đồng ý chia sẻ kiến thức, kinh nghiệm chuẩn bị và thi Competitive Programming với DayNhauHoc.

Mọi người đặt câu hỏi ở bên dưới nhé, mỗi câu hỏi là một reply riêng. Nếu thấy câu hỏi nào mình thích thì like, đừng đặt câu hỏi trùng. Đạt sẽ kiểm tra trùng và gộp câu hỏi, nếu có. Và sẽ tách nhiều câu hỏi ra, mỗi câu hỏi một reply, nếu được.

Mọi người giúp chia sẻ topic này lên mạng xã hội, email, người quen để có nhiều câu hỏi hơn về lĩnh vực này :slight_smile:

1 Like

tài liệu để rèn luyện khi tham gia competitive programming bạn dùng gồm những cuốn nào nhỉ ?

Competive Programming có lợi gì khi xin việc không?:joy:
Khi đi thi Competive Programming thì chúng ta cần chuẩn bị những điều gì?:yum:

Anh cho em hỏi là mình luyện & học giải thuật tới 1 mức nào đó rồi dừng để học những cái khác (như OOP, công nghệ mobile, web, …) hay luôn tìm hiểu giải thuật anh ?

Và nhưng nơi / địa điểm / website / sách uy tín mình có thể luyện giải thuật ạ ? Ngoài Cuốn Giải thuật & Lập trình của thầy Lê Minh Hoàng ra !

Một điều nữa là: Không biết mình có nên thi mấy cuộc thi HSG tin lớp 9, cấp 3, … không ạ ? Thuật toán của em cũng khá ổn, không đến nỗi tệ, nhưng em không muốn học Pascal vì phần lớn nghe người ta nói học dư thừa và không thực tế, và vì thế nên em sẽ không thi HSG tin 9 được vì phải biết Pascal. Còn cấp 3 thì hình như cho dùng C++ nên có thể sẽ ok. Anh nghĩ sao về vấn đề này ?

Em cảm ơn :slight_smile:

1 Like

Em lớp 11, năm nay thi tỉnh, năm sau mục tiêu thi QG. Hiện tại đang làm các bài trên laptrinh.ntu.edu.vn.
Em có đọc cuống giải thuật và lập trình của thầy LÊ MINH HOÀNG nhưng không hiểu code pascal @@.
Cho em hỏi có cuốn nào code bằng c++ mà hay không nhỉ :3

1 Like

Trước tiên là xin cám ơn mọi người đã chú ý đến session này và hy vọng mọi người sẽ có hung thú với nó và đặc biệt cám ơn anh @ltd đã cho em lên thớt :joy: :joy: :joy:
Cũng cho mình xin lỗi vì thời gian này đang bận nhiều việc nên mấy ngày nay không onl và trả lời các bạn sớm được . Mong các bạn thông cảm.

3 Likes

Mình bắt đầu học về thuật toán, về CP từ hồi cấp 3 (một số hay gọi là luyện gà đá ấy), thì lúc đó tài liệu gối đầu giường của mình và cũng hầu hết tất cả các bạn khác lúc đó là “Giải thuật và lập trình” của thầy Lê Minh Hoàng, và bộ “Tài lieu giáo khoa chuyên tin” (gồm 3 quyển lý thuyết và thêm các quyển bài tập). Ngoài ra thì còn một số tài lieu chuyên đề nhưng cũng không đáng chú ý lắm.
Thì những tài liệu trên đủ cung cấp một kiến thức nền tang khá đủ, nhưng mà một nội dung hầu hết các tài lieu đều ít nói đến là cấu trúc dữ liệu và toán học, thì phần này tụi mình được các thầy cô dạy trực tiếp, đồng thời là tự tìm hiểu thêm các tutorial, các slide về các chuyên đề này trên mạng một số nguồn khá chất lượng là Codeforces, Topcoder, VNOI, geeksforgeeks,… còn về sách tiếng anh thì mình cũng chưa đọc nhiều cuốn về CP, chỉ mới đọc hết bộ Competitive Programming của Steven Halim (coach của team ACM ICCP và SG IOI, giảng viên ĐHQG Singapore NUS), các cuốn khác thì cũng có đọc nhưng chỉ đọc những phần mình cần tìm hiểu thôi chứ chưa đọc hết.

1 Like

Thứ nhất là về Competitive Programming (mình sẽ gọi tắt là CP) có lợi gì? Đây là một câu hỏi mà rất nhiều người đã từng đặt ra và cũng rất nhiều người đã/đang là 1 CP-er tự thắc mắc mà không tìm ra câu trả lời :slight_smile: Và ngay trong diễn đàn DNH cũng đã có những topic thảo luận rất sôi nổi về nó Tại sao phải học thuật toán? mình xin tóm lượt một số ý của mình (cũng có nhiều ý đã được mọi người nói đến trong topic trên):

  • Trong quá trình học, thì việc có kiến thức về CP, mà thực tế cũng là 1 phần trong “cấu trúc dữ liệu và thuật toán” thì nó sẽ giúp mình có những cách tư duy khác, sáng hơn, tốt hơn, nhanh hơn là so với những cách thông thường.
  • Đối với một fresher khi xin việc, thì những kiến thức về công nghệ, coding skill, những project mà chúng ta thể hiện trong CV là những thứ duy nhất mà nhà tuyển dung có thể nhìn thấy (nhưng vẫn chưa chắc chắn). Thì để kiểm tra xem ta có năng lực thật sự và phù hợp với nhu cầu của họ hay không, cách thực tế nhất là làm bài test về thuật toán.
  • Hiện nay các công ty lớn ở VN đã bắt đầu thoát khỏi cái gọi là code thuê, Outsourcing mà đang tự phát triển dự án cho riêng mình, tự phát triển sản phẩm, thì lúc này rất cần đến những top dev, có khả năng sang tạo và tư duy thuật toán tốt, vì nếu chỉ sang tạo ra ý tưởng sản phầm mà không có cách giải quyết hay cách giải quyết không hiệu quả thì cũng như không, chẳng khác nào tạo điều kiện cho đối thủ phát triển 1 sản phẩm với chức năng tương tự và tính năng tốt hơn, từ đó giành thị trường.
  • Đối với các nhà tuyển dụng, họ sẵn sàng bỏ thời gian 3-6 tháng để ta thử việc, học những kiến thức về công nghệ, framework, ngôn ngữ, … để phục vụ cho nhu cầu của công ty, nhưng với thời gian đó, không thể đào tạo một người không có kiến thức gì về thuật toán, về phương pháp giải quyết vấn đề trở thành một người giỏi được.

Còn câu hỏi thứ hai, cần gì khi đi thi CP, thì đương nhiên là kiến thức rồi, ngoài ra thì cũng phải luyện tập rât nhiều, không có thành công nào mà không bắt nguồn tự sự tập luyện, tiếp theo là tâm lý, tâm lý càng thoải mái thì áp lực càng ít, khả năng tập trung càng cao.

3 Likes

Thuật toán và ứng dung luôn song hành với nhau

  • Nếu em không biết gì về thuật toán thì khó mà hiểu được những ý nghĩa, những chức năng đã có sắn để vận dung nó, hay khó có thể phát triển kỹ năng lên 1 mức mới. Em chỉ biết code thì mãi mãi em chỉ là coder, để trở thành 1 dev thì em phải là như cái tên của nó, phải biết sang tạo và phát triển, còn lý do vì sao sang tạo và phát triển lại cần thuật toán thì em có thể đọc thêm comment trên của anh :slight_smile:
  • Nếu em mãi mãi chỉ tìm hiểu về thuật toán mà không áp dung hay không biết cách áp dung nó và ứng dung và công việc thực tế, thì ngoài những kinh nghiệm về tư duy ra, còn lại tất cả những lý thuyết em học chỉ là lý thuyết suông và mãi là lý thuyết suông

Câu hỏi thứ hai, những “địa chỉ” của dân luyện giải thuật thì khá phổ biến: spoj, vnoi, codeforces, topcoder, hackerrank, codechef, … hay một số OJ “lai”, vừa luyện tư duy giải thuật vừ luyện các câu hỏi mà các công ty công nghệ lớn có thể hoặc đã dùng để interview là interviewbit và leetcode.

Câu hỏi thứ ba, theo anh thì lớp 9 chưa nên đặt nặng vấn đề thi thố, nếu các em nhỏ có sở thích thì nên tạo điều kiện để các em tìm hiểu, đừng ép buộc theo kiểu luyện gà nòi. Cấp 3 hiện tại thì thi HSG QG đã cho phép dung C/C++ (hsg cấp tỉnh thì tùy từng tỉnh, anh không dám chắc) nên có thể bỏ qua Pascal để tìm hiểu ngay luôn C/C++, nhưng vẫn khuyên là nên biết pascal để đọc các tài liệu, vì tài liệu tiếng Việt cho học sinh THPT hiện nay hầu hết đều là pascal, thực tế thì cú pháp của nó không có rắc rối, chỉ tốn 1-2 tuần là có thể đọc hiểu được rồi. Nhưng con đường CNTT ở cấp 3 không chỉ có thi HSG, mà còn cả các kì thi về kỹ thuật, nó thực tế, thực dung hơn và rất thích hợp cho đa số mọi người: mức tư duy vừa đủ, khả năng tìm tòi học hỏi vùa đủ, thỏa mã sức tư duy sang tạo, … chứ không nặng lý thuyết như thi HSG, như vậy thì dễ tạo được sự đam mê cho các bạn

2 Likes

Sách về thuật toán sử dụng bằng C++ mà viết tiếng Việt ở VN mình thì hơi bị hiếm, nhưng mà anh nghĩ em nên tìm hiểu sơ về pascal, không phải để dùng, mà là để đọc hiểu, vì hầu hết các tài liệu, thậm chí là các lời giải mẫu của các bạn, các anh chị từng thi HSG QG chia sẻ trên các diễn đàn, các blog đều dung pascal rất nhiều.
Ngoài ra việc em làm các bài trên laptrinh.ntu.edu.vn là không đủ, chắc chắc không đủ, em cần phải luyện tập thêm nhiều ở các trang có tính truyền thống hơn và chuyên về CP hơn như vnoi, codeforces, USACO (trang thi của mỹ, cũng như HSG QG của VN), COCI, hay đặc biệt là các free contest của Nguyễn Tiến Trung Kiên, nó sẽ giúp em cọ xát hơn, tích lũy nhiều kinh nghiệm và quen với mức độ ra đề thực tế hơn.

Anh ơi cho em hỏi , em không học chuyên cơ mà em rất muốn thi vào năm sau, việc tự học tài liệu chuyên tin của em hiện tại rất khó khăn vì có những từ ngữ em không hiểu nổi , ( ví dụ như kí hiệu toán học ô lớn trông đánh giá độ phức tạp của thuật toán ) , hoặc có những bài họ giải quá hay, em không thể hiểu được cách thuật toán nó hoạt động và cũng không hiểu sao người ta nghĩ được vậy ? Thấy anh có đề cập về các kì thi kỹ thuật , anh có thể mách nước cho em được không ạ ? Em biết rất ít thông tin về những cuộc thi như vậy ? Em cảm ơn anh trước ạ :smile:

Thưa anh, hiện em đang tự học thuật toán nhưng cảm thấy tiến độ rất chậm,hầu như sau mỗi ngày đều không đáng kể gì rõ rệt, cho em hỏi lúc trước anh có từng gặp tình trạng như vậy không, và anh đã khắc phục như thế nào, em cảm ơn ạ :smiley:
btw, AMA nghĩa là gì ạ :v

Anh ơi em muốn hỏi thi ACM ở ĐH như thế nào ạ? Em “tạch” tuyển QG và em đã bỏ CP khoảng 2 tháng rồi ạ, nhưng mà em vẫn muốn thi ACM :’(

AMA = Ask Me Anything =)))

1 Like

Trước tiên xin lỗi tất cả mọi người vì 1 tháng vừa rồi mình bận khá nhiều việc và cũng như tập trung ôn thi nên không có onl trên DNH được. Nên giờ mới có thể trả lời cho mọi người được.

Cái này thì a cũng không rõ nữa em, vì thời anh học cấp 3, nó chưa phổ biến như bây giờ, anh không tham gia nên cũng không nắm rõ hình thức của nó.
em thử liên hệ hỏi thử một số giáo viên trong trường, hoặc là một số kì thi lớn thì có website riêng, em có thể tìm hiểu thử xem nhé.

1 Like

Đó là chuyện bình thường em à, không có gì phải lo lắng cả
Thậm chí có những kiến thức, những thuật toán, cấu trúc mà mất hàng tuần thậm chí gần cả tháng để lĩnh hội hết được. Bản chất thì luyện thuật toán cũng như luyện nội công, không thể nào 1 sớm 1 chiều được.
Cứ tiếp tục try hard. Không phải là mình học nó trong vài tháng 1 năm, mà là suốt một thời gian dài. Chỉ cần đi đúng tiến độ, đúng lộ trình mình đặt ra là được. Cố gắng tham gia các diễn đàn thuật toán của VN như VNOI để học hỏi thêm nhé. Giao lưu càng nhiều thì càng tốt.
“Muốn đi nhanh, hãy đi một mình. Muốn đi xa, hãy đi cùng nhau”

2 Likes

Anh không biết em (sẽ) học trường nào nên không nói rõ được, vì mỗi trường có một cách tuyển quân và chuẩn bị cho mùa ACM khác nhau. Anh chỉ nói những cái chung và kèm theo vài lời khuyên nếu em chưa có kinh nghiệm thi ACM

  • Mùa ACM thường bắt đầu từ đầu hè, đây là thời gian try hard của các bạn sinh viên để chuẩn bị cho các kì thi chính thức.
  • Nếu trường có phong trào ACM mạnh thì chỉ cần chờ thông báo và đăng kí tham gia, nếu trường ít có phong trào OLP và ACM thì có thể thử liên hệ với các giáo viên trong khoa để ngỏ lời tham gia.
  • Chọn team: tốt nhất là nên lập 1 team mạnh - đều - hợp để tập luyện cùng nhau: 3 người cùng giỏi chưa chắc làm việc hợp với nhau được. Hay 3 người cùng 1 sở trường thì team sẽ không đều, … đó là những cái cần tránh.
  • Nếu được khi lập team nên có 1 người đẫ từng tham gia ACM các năm trước, vì họ đã có kinh nghiệm teamwork, tập trung trong thời gian dài và chiến thuật thi ACM.
  • ACM rất qua trọng teamwork và chiến thuật, thời gian thi cũng rất dài (đến 5 tiếng) và scoreboard được publish, vì vậy cần sự tập trung cũng như là tâm lý tốt (thi QG thì làm sao cũng chỉ mình biết, đến cuối cùng chờ điểm và giải, nhưng ACM thì mình hay hay dở mọi người đều thây trực tiếp, nếu sub lên mà WA liên tục trong khi team khác sub nào cũng AC thì rất dễ tâm lý).
  • Xác định mục tiêu phấn đấu
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?