Lewati ke isi

Link Sumber: From Newbie to Expert in 3 Months | 100% works! - YouTube


From Newbie to Expert in 3 Months | 100% works!

Halo semuanya, saya Shayan, dan di video ini saya ingin berbicara tentang cara untuk menjadi Expert di Codeforces. Jika Anda belum mengenal saya, nama saya Shayan, seorang IGM di Codeforces dan juga finalis dunia ICPC.

Mengapa saya orang yang tepat untuk menceritakan ini? Jika Anda melihat akun saya di Codeforces, "Shayan", Anda akan melihat bahwa dalam waktu singkat, dari Maret 2015 hingga Juni 2015, saya mengalami peningkatan besar dan naik dari newbie menjadi expert. Dan hari ini, saya ingin berbagi dengan Anda apa yang sebenarnya saya lakukan dan bagaimana Anda bisa melakukannya juga. Ini adalah sesuatu yang selalu saya sampaikan kepada siswa-siswa saya, jadi ambil pulpen dan kertas, catat poin-poin ini karena ini akan sangat membantu Anda.

Mari kita mulai.

1 | Selesaikan Masalah Sesuai dengan Rating Anda

Anda tahu bahwa jika Anda menyelesaikan masalah yang sangat mudah, itu tidak akan banyak membantu Anda untuk berkembang. Dan jika Anda menyelesaikan masalah yang sangat sulit, itu akan memakan banyak waktu, dan Anda tidak akan bisa menyelesaikan banyak masalah. Saya yakin untuk menjadi expert, Anda perlu menyelesaikan banyak masalah.

Saya sendiri menyelesaikan sekitar 10 masalah sehari. Jika Anda melihat akun saya, Anda bisa melihat bahwa pada periode itu, saya menyelesaikan sekitar 10 masalah sehari, dan karena itu, masalahnya tidak terlalu sulit. Bahkan berpikir dan membuang waktu pada masalah pun akan sangat membantu di masa depan, tetapi karena Anda baru memulai dan ingin mencapai expert, saya yakin pada periode ini, strategi terbaik bagi Anda adalah menyelesaikan masalah di sekitar rating Anda sehingga Anda bisa menyelesaikan sekitar 10 masalah per hari.

Saya percaya masalah-masalah ini harus memiliki tingkat kesulitan di mana Anda menghabiskan rata-rata sekitar setengah jam untuk menyelesaikannya.

"Dulu, Codeforces tidak memiliki tingkat kesulitan untuk masalah. Jadi, saya mengurutkan masalah berdasarkan jumlah orang yang menyelesaikannya dan saya menyelesaikan lima halaman pertama dari problem set yang diurutkan berdasarkan jumlah accepted."

"Itu benar-benar pendekatan terbaik. Saya selalu menyuruh para pemula, siswa-siswa saya, untuk melakukan ini terlebih dahulu."

"Saya selalu menyuruh mereka untuk menyelesaikan 400 masalah termudah terlebih dahulu, dan baru setelah itu kita akan membicarakan hal lain. Jangan mulai belajar struktur data yang rumit, dll. Cukup selesaikan masalah implementasi, masalah brute force, ya, matematika, itu adalah pendekatan terbaik."

Misalnya, jika rating Anda saat ini 1200, saya yakin tingkat kesulitan terbaik untuk Anda adalah sekitar 1200. Seperti yang saya katakan, alasan di baliknya adalah Anda perlu menyelesaikan banyak masalah.

Jika Anda menyelesaikan masalah yang sangat sulit, Anda harus banyak memikirkannya. Dengan menghabiskan banyak waktu pada masalah yang sangat sulit, Anda akan menghabiskan banyak waktu untuk berpikir, tetapi sangat sedikit waktu untuk coding. Dan itulah mengapa setelah beberapa saat, Anda akan merasa pandai berpikir, pandai menyelesaikan masalah, tetapi tidak pandai mengimplementasikannya, dan Anda tidak bisa menyelesaikan masalah-masalah itu. Itulah mengapa saya yakin Anda harus menghabiskan waktu Anda pada masalah dengan kesulitan di sekitar rating Anda pada tahap ini. Jangan mencari masalah yang sangat mudah dan jangan mencari masalah yang lebih sulit dari level Anda saat ini.

Beberapa orang mungkin bertanya, "Tapi jika saya menghabiskan banyak waktu menyelesaikan masalah dengan rating saya sendiri, apakah rating saya akan meningkat?" Ya, tentu. Ketika rating Anda berada pada titik tertentu, itu tidak berarti Anda bisa menyelesaikan dan mengimplementasikan semua masalah pada rating itu. Mungkin pada beberapa topik (tags) Anda lebih baik, dan pada beberapa topik lain Anda lebih buruk. Intinya adalah ketika Anda menyelesaikan masalah di sekitar rating itu, Anda juga akan menemukan kelemahan Anda. Anda akan melihat, dari rating Anda sendiri, topik apa yang tidak begitu bagus, dan Anda akan bisa menyelesaikan masalah-masalah itu juga.

2 | Jangan Mengganggu Diri dengan Materi yang Tidak Relevan

Jika Anda telah menonton dua video saya yang lain tentang cara keluar dari newbie, Anda akan melihat bahwa saya mengatakan Anda tidak boleh mempelajari struktur data yang sangat kompleks seperti segment tree, centroid, dll. saat Anda masih newbie. Itu selalu benar, tetapi satu-satunya perbedaan adalah, sekarang Anda ingin mencapai expert, Anda harus mengerjakan lebih banyak topik. Tetapi masih ada topik yang tidak perlu Anda pelajari banyak.

Misalnya, saya masih yakin struktur data yang kompleks tidak diperlukan. Sebaliknya, Anda harus fokus pada hal lain yang akan saya ceritakan pada poin berikutnya. Jadi, intinya adalah materi yang tidak relevan bukan hanya materi yang tidak berguna dan tidak akan pernah muncul di kontes pemrograman kompetitif, tetapi juga materi yang lebih sulit dari yang Anda butuhkan. Kadang saya melihat orang yang ingin menjadi expert menghabiskan waktu mereka untuk mempelajari persistent segment tree. Itu bodoh. Anda tidak boleh melakukannya. Jadi, fokuslah pada pemecahan masalah di sekitar rating Anda. Jangan menghabiskan waktu untuk mempelajari algoritma yang sangat sulit.

3 | DP, DP, dan DP

Salah satu topik terpenting dalam pemrograman kompetitif adalah pemrograman dinamis (dynamic programming). Anda harus menghabiskan banyak waktu untuk itu, terutama saat Anda ingin menjadi expert. Itu adalah waktu di mana Anda harus menghabiskan banyak waktu pada pemrograman dinamis. Jadi, cobalah untuk banyak mengerjakan pemrograman dinamis, berbagai cara pemrograman dinamis, dll.

Jika Anda telah menonton topic streams saya dan belajar secara mendalam dari saya, Anda tahu bahwa pemrograman dinamis memiliki empat fase berbeda yang harus Anda perhatikan, dan saya telah memberitahu Anda bagaimana cara mendekati masalah pemrograman dinamis. Jadi, pastikan Anda benar-benar menguasainya dan telah memahaminya, dan cobalah untuk menyelesaikan banyak masalah dari pemrograman dinamis juga. Dan masalah-masalah yang saya ceritakan tadi, yang harus Anda selesaikan 10 masalah sehari, juga termasuk masalah pemrograman dinamis. Jadi, selain menyelesaikan masalah tanpa tag di sekitar rating Anda yang sangat membantu, cobalah juga untuk menyelesaikan masalah dengan tag pemrograman dinamis.

4 | Tonton Topic Streams

Saya telah menyiapkan banyak topic streams gratis untuk Anda di mana saya telah memberi tahu Anda cara mendekati berbagai topik seperti pemrograman dinamis, teori graf, teori bilangan, dll. Itu sepenuhnya gratis dan dirancang untuk orang-orang seperti Anda. Jadi, saya sangat merekomendasikan Anda untuk menontonnya untuk benar-benar memahami dan mempelajari topik-topik ini. Saya akan menaruh tautannya di deskripsi di bawah ini, jadi Anda bisa menontonnya dan mulai belajar dari sana.

Setelah menonton video di mana saya telah mempelajari topik tersebut, misalnya katakanlah pemrograman dinamis, tonton juga video di mana saya menyelesaikan masalah di dalamnya. Jadi, pastikan Anda menggunakan materi ini, terutama jika Anda tidak memiliki guru saat ini atau Anda tidak terlalu puas dengan guru Anda saat ini.

5 | Berpikir Sesuai Kebutuhan

Jadi, pertanyaan yang sangat penting adalah seberapa banyak Anda harus memikirkan sebuah masalah? Saya juga telah bertanya tentang hal ini kepada banyak competitive programmer hebat yang bisa Anda lihat di wawancara saya, seperti saya bertanya pada Um_nik dan Rina serta banyak orang lain. Kami semua sepakat pada hal yang sama: Anda harus menghabiskan waktu selama Anda tidak buntu. Jika Anda masih merasa memiliki ide untuk menyelesaikan masalah, Anda harus terus memikirkannya. Jangan langsung melihat solusi masalahnya.

Tetapi saya dan orang-orang yang saya wawancarai percaya bahwa, terutama pada tahap ini, ketika Anda merasa buntu, tidak apa-apa jika Anda melihat editorial. Misalnya, baca baris pertama dan lihat apa yang dikatakannya. Dapatkan petunjuk darinya dan lanjutkan berpikir. Dan bahkan jika itu tidak cukup bagi Anda, Anda bisa terus membaca untuk melihat apa solusinya.

Selalu ada masalah yang belum Anda selesaikan, dan saya tidak berpikir Anda harus langsung melihat solusinya, Anda harus melihat solusinya. Jadi, bagaimana menurut Anda kita harus mendekati masalah? Maksud saya, berapa lama Anda harus berpikir sebelum mulai melihat solusi?

Um_nik menjawab, "Saya rasa jika Anda merasa perlu tahu sesuatu yang tidak Anda ketahui, mungkin seperti mulai membaca baris demi baris dan berpikir. Tapi sebagai aturan umum, Anda harus mencoba melihat masalah dari ujung ke ujung, membacanya sedikit demi sedikit di editorial dan berpikir lagi."

6 | Belajar Sendiri

Seperti yang saya katakan, Anda tidak perlu mempelajari banyak algoritma untuk menjadi expert. Anda harus menyelesaikan banyak masalah untuk menjadi expert. Itulah poin utamanya. Menyelesaikan masalah adalah hal yang penting, bukan menghafal apa itu algoritma.

Jadi, pendekatan yang sangat saya rekomendasikan—dan itulah yang saya lakukan juga—adalah belajar saat Anda menyelesaikan masalah. Saya biasa melakukan ini. Saya tidak membaca editorial. Sejujurnya, di awal saya tidak tahu editorial itu ada. Saya baru di Codeforces dan saya tidak melihat tombol tutorial itu. Jadi, saya membaca kode orang lain, dan saya belajar banyak dari membaca kode orang lain. Saya belajar cara coding yang lebih baik dan saya juga belajar beberapa cara berpikir baru.

Cara yang saya gunakan adalah dengan membuka sebuah kode dan mencoba memahami apa yang dilakukannya, dan itu membantu saya berpikir juga. Setelah beberapa saat, kadang saya menyadari bahwa itu sebenarnya sebuah algoritma. Intinya adalah saya tidak pernah mencoba mempelajari sebuah algoritma. Saya mencoba menyelesaikan masalah, dan saat saya menyelesaikannya, ketika saya melihat ada masalah yang membutuhkan sesuatu, saya mempelajarinya saat menghadapi masalah itu. Jadi, saya tidak mempelajari algoritma sebelum benar-benar menghadapi masalah yang membutuhkan algoritma itu.

Itulah yang saya rekomendasikan juga untuk Anda. Cobalah untuk mempelajari algoritma saat Anda menyelesaikan masalah. Jangan mulai dengan belajar terlebih dahulu lalu menyelesaikan masalah. Mulai saja menyelesaikan masalah, dan Anda akan belajar. Dan topik terpenting untuk menjadi expert, seperti yang saya katakan, adalah pemrograman dinamis, algoritma greedy, teori bilangan, algoritma graf, dan masih banyak lagi topik yang saya sebutkan di video newbie, yaitu implementasi, brute force, matematika, dll.

"Ketika Anda memulai, Anda adalah seorang spesialis saat Anda memulai kontes di Codeforces. Setelah sekitar 2 tahun, Anda menjadi warna merah. Dan Anda mengatakan bahwa setiap orang bisa menjadi grandmaster. Jadi, apa metode latihan Anda saat itu agar orang lain juga bisa melakukannya dan mungkin mereka juga bisa mencapai grandmaster?"

Um_nik menjawab, "Saya menyelesaikan banyak masalah, Anda tahu, dan itu saja."

"Berapa lama Anda menyelesaikan masalah per hari atau per minggu?"

"Saya tidak ingat, tapi pada dasarnya, seluruh waktu luang saya."

"Seluruh waktu luang Anda?"

7 | Jangan Takut Kontes

"Oke, untuk saat ini saya tidak berpartisipasi dalam kontes karena saya belum cukup baik, tapi saya akan berlatih dan bekerja keras, dan setelah beberapa saat saya akan mulai berpartisipasi dalam kontes."

Itu bukan pendekatan yang baik. Seperti yang Anda lihat, saya juga berpartisipasi dalam semua kontes saat itu. Lihat juga bagian ini dari Alireza Avani, si alggo dari Iran. "Ada juga pertanyaan lain dari Codeforces, dan bunyinya: 'Apa perbedaan yang kamu lakukan dibandingkan dengan orang lain yang kamu yakini memiliki efek signifikan pada peningkatanmu?'"

Alireza Avani menjawab, "Saya selalu berusaha untuk tidak pernah melewatkan kontes di Codeforces. Tidak pernah melewatkan kontes. Saya tidak melewatkan satu pun kontes di tahun 2018 dan 2019."

"Wow! Kenapa? Bagaimana bisa?"

"Karena saya sangat menikmatinya. Apakah kamu melewatkan janji kencan dengan kekasihmu? Tidak. Tidak."

Jadi, di awal, sangat penting untuk berpartisipasi dalam semua kontes CF. Itu juga meningkatkan motivasi Anda, melihat rating naik dan turun sangat membantu. Jadi, cobalah untuk berpartisipasi dalam semua kontes yang ada. Jangan takut seperti, "Ya ampun, saya akan kehilangan rating." Tidak apa-apa kehilangan rating, Anda akan naik kembali.

Cobalah untuk berpartisipasi di semua kontes. Dan jika dalam sebuah kontes ada masalah yang Anda yakini seharusnya bisa Anda selesaikan tetapi Anda tidak berhasil, setelah kontes, habiskan lebih banyak waktu untuk itu. Kami menyebutnya upsolving, dan cobalah untuk upsolve masalah itu. Upsolving sangat membantu Anda untuk berkembang.

Dan tidak hanya berpartisipasi dalam kontes, tetapi juga cobalah untuk melakukan virtual contests juga. Codeforces memiliki fitur ini yang disebut partisipasi virtual, di mana Anda bisa memilih kontes Codeforces mana pun, dan kemudian Anda bisa memulai kontes virtual. Jadi, itu akan persis seperti kontes CF normal. Anda akan menyelesaikan masalah, Anda tidak memiliki akses ke solusi atau apa pun. Ini seperti Anda benar-benar berpartisipasi dalam kontes CF, tetapi secara virtual. Kontesnya sudah lewat, tetapi Anda akan berpartisipasi di dalamnya dalam waktu terbatas itu dan Anda harus menyelesaikan masalahnya.

Berpartisipasi dalam kontes virtual dan upsolving masalah yang belum Anda selesaikan selama kontes sangat membantu saya, jadi saya yakin itu juga akan sangat membantu Anda.

8 | Cara Melihat Tutorial atau Membaca Kode Orang Lain

Nah, misalnya, pada masalah ini, Anda bisa menemukan editorial di sini. Juga, ketika saya menyiapkan editorial video untuk kontes Codeforces, Anda bisa menemukan editorial video dari saya juga di mana saya telah menjelaskan setiap masalah. Anda juga bisa melihat kode orang lain dengan mengklik tautan ini dan kemudian klik nomor ini, dan Anda akan memiliki akses ke kode setiap orang. Dan poin yang sangat bagus tentang itu adalah kode-kode ini diurutkan berdasarkan ukurannya, jadi kode pertama yang akan Anda lihat di sini adalah kode terkecil. Jadi, Anda bisa belajar banyak tentang cara menulis kode yang lebih pendek dan cara mengimplementasikannya dengan lebih baik, karena beberapa orang mungkin harus melakukan banyak pekerjaan untuk hal yang sama yang bisa dilakukan dengan kode yang lebih pendek.

Kesimpulan

Oke, teman-teman, itu saja dengan tujuh poin tentang cara menjadi expert. Ini adalah hal-hal yang saya lakukan sendiri juga, tentu saja kecuali menonton tutorial saya sendiri. Dan dalam kedua kasus, ketika saya melakukannya dan ketika saya menyuruh siswa-siswa saya untuk melakukan ini, itu selalu berhasil dengan baik dan orang-orang mengalami pertumbuhan besar dalam rating mereka. Saya tunjukkan lagi, Anda bisa melihat bahwa hanya dalam 3 bulan saya bisa mencapai ini, memiliki peringkat empat dalam kontes Codeforces saat saya seorang expert dari seorang newbie. Jadi, ketika itu berhasil untuk saya, itu pasti akan berhasil untuk Anda juga.

Sekarang, saya punya tugas untuk Anda. Di kolom komentar di bawah, tuliskan keadaan Anda saat ini. Berapa rating Anda sekarang dan dalam berapa bulan Anda ingin menjadi expert? Dan ketika waktu itu telah berlalu, misalnya Anda mengatakan bahwa dalam 5 bulan saya akan menjadi expert, ketika 5 bulan berlalu, balas saja komentar itu dan katakan bagaimana Anda melakukan strategi ini dan bagaimana itu berhasil untuk Anda. Saya yakin jika Anda benar-benar melakukan strategi ini, Anda akan mencapai tujuan Anda.

Itu saja. Saya harap video ini membantu Anda. Jika Anda belajar sesuatu dari video ini, silakan suka dan Anda juga sangat disambut untuk bergabung dengan komunitas kami dengan bergabung di saluran Telegram dan grup Telegram kami. Anda bisa menemukan tautannya di deskripsi di bawah. Sampai jumpa lain waktu, Shayan.