Competitive Programming Beginners Guideline for Learning Topics Step by Step.
এই Blog এ আমি একজন Beginner কিভাবে Competitive Programming Zero থেকে শুরু করবে, কিভাবে Codeforces এ Practice করবে, কিভাবে Step by Step different topics শিখবে, আর কোথা থেকে শিখবে সব অনেক Details এ লিখেছি। কিভাবে একজন Beginner Codeforces 0 Rating থেকে শুরু করে Codeforces এ 1600+ ( Expert ) হবে আর পাশা পাশি Basic Topics : C Programming, C++ STL, Greedy, Bruteforce, Constructive Algorithm, Partial Sum, Binary Search, Number Theory, Basic Graph Theory, Basic Dynamic Programming কখন, কভাবে, কোথা থেকে শিখবে তা Details এ আলোচনা করেছি। Blog টি একটু বড় কারণ 0 to 1600 Journey টাও একটু Long. তাই একটু ধৈর্য ধরে পুরাটা ভাল করে পড়বে।
Who am I?
Muhammad Shahriar Alam
CSE 17 Batch, University of Chittagon
ACM ICPC Dhaka Regional-2020, 17th Rank
Codeforces : _Muhammad ( max. 1830, Expert )
Software Engineer, Enosis Solution
Founder, CPS Academy
Payment ?
Give 50 claps in this blog
Subscribe My Youtube Channel
Like My Facebook Page
Remember Me In Your Doa
Motivation :
একজন Beginner যখন Competitive Programming শুর করে অথবা শুর করতে চায় তখন সে অনেক গুলি সমস্যা এর সম্মুখীন হয়। কিভাবে শুরু করবে, কোথা থেকে Practice করবে, কিসের পর কি শিখবে, কোথা থেকে শিখবে, কিভাবে Improvement করব, একটা Problem নিয়ে কতক্ষণ চিন্তা করব, আরও অনেক কিছু। এই সব Question এর Answer, আর একজন Beginner এর জন্য একটা Basic Guideline হিসেবে আমি এই Blog টি লিখেছি। তবে এই Blog কে একদম Strictly Follow করতে হবে এমন না। কারণ সবার Improvement এর Style একি না। তাই এই Blog কে Standard ধরে তুমি তোমার নিজের মত আগাবে। তবে এই Blog কে Strictly Follow করলেও ইন শা আল্লাহ Improvement হবে। তাহলে চলুন শুরু করা যাক।
Learning C Programming and Starting Basic Problem Solving :
প্রথমে কোনো ভাল বই অথবা ভিডিও দেখে ভাল করে C programming টা শিখে ফেল। আমি Suggest করব Herbert Scheldt এর Teach Yourself C বইটা। এই বই থেকে :
- printf / scanf ( I/O )
- if-else
- while loop, for loop, do-while loop
- array / string
- function
- recursion
- structure
- file
- pointer
এই Topic গুলা Serially ভাল করে শিখে নিবে। Recursion এর জন্য আমার এই ভিডিও টি দেখতে পার :
উপরের সব Topic শিখার পাশা পাশি Different Online Jude এ Problem Solving Practice করতে হবে। তোমরা beecrowd থেকে Practice শুরু করতে পার। এটা One of The Easiest Online Judge. এর নাম আগে URI ছিল। আমি এখান থেকেই আমার Competitive programming Journey শুরু করেছি।
BeeCrowd :
BeeCrowd এ ৫০-৭০ টা Problem Solve করার পর Codeforces এ Practice শুর করে দিবে। যদি Confidence না পাও তাহলে ১০০ টা Solve করবে। কিন্তু এর বেশি না। কারণ সুধু Easy Problem Solve করলে Improvement হবে না। তোমাকে তোমার Difficulty Level থেকে Slightly Hard Problem Solve করতে হবে। তাই ৫০-৭০ টা আর Confidence না পেলে ১০০ টা মত BeeCrowd এ Problem Solve করে Codeforces এ Practice শুরু করে দিতে হবে।
Codeforces :
Codeforces হল World এর সবচেয়ে বড় Online Programming Contest Site. এখনে Week এ ১-২টি Online Programming Contest হয়। Programming Contest Performance এর ওপর Based করে Codeforces Contestant দের একটা Rating দেয়। তোমার Current Rating অনুযায়ী তুমি যদি Contest এর Rank List এ পিছিয়ে থাক তাহলে তোমার Rating Drop করবে আর তোমার Rating অনুযায়ী যদি Rank List এ উপরের দিকে থাক তাহলে Rating বাড়বে। আবার Contest এ কোন Problem কোন Rating এর কত জন Contestant Solve করেছে তার ওপর Base করে Problem কেও একটি Rating দেয়া হয়। Problem এর Rating টা হল Problem এর Difficulty. যে Problem এর Rating যত বেশি সেই Problem এর Difficulty ও তত বেশি।
Start Practice In Codeforces from 800–900 Rated Problem and Learn Basic Topics:
Codeforces এর Filter ৮০০-৯০০ Rating এর Problem Filter করে Solve করা শুরু করে দিবে। সব থেকে Easiest Problem গুলার Rating হল ৮০০। আর Filter করার পর Problem গুলা Difficulty wise sort করবা না। Difficulty wise Sort করলে অনেক পুরান Problem গুলিও List এ চলে আসবে। কিন্তু তোমাদের Recent Contest এর Problem Practice করতে হবে।
Mark করা Filter এ Rating Range দিবে এর পর Apply এ Click করবে। কিন্তু Red Mark করা Green Tick Mark এ Click করবে না। Click করলে এটি Sort হয়ে যাবে।
এখন Codeforces এর ৮০০-৯০০ Rating এর Problem Solve করবা আর এর পাশাপাশি নিচের Topic গুলা Serially Cover করবা :
- Greedy
- Brute Force or Complete Search
- Constructive
- Sorting ( Insertion sort, bubble sort )
- Complexity Analysis
Complexity Analysis খুবই Important Topic. এটা Competitive Programming, University Course, Software Development সবখানে লাগে। এটা আমার নিচের video দেখে শিখে নিতে পার :
Greedy, Bruteforce or Complete search এই ২টি Topic তোমরা Competitive Programming 3 by Steven Halim & Felix Halim এর বই থেকে শিখেনিবে। এই বইটি অত্যন্ত ভাল একটি বই Competitive Programming শিখার জন্য। এই বই এ Topic Discussion এর পাশাপাশি অনেক গুলি Uva Online Judge থেকে Practice Problem দেখান হয়েছে আর অনেক গুলি Practice Problem ও Topic wise দেয়া হয়েছে। তোমরা চাইলে এই বই Follow করতে পার। আপাদত এখন এই বই থেকে Greedy আর Bruteforce শিখে Practice কর।
Practice Problems for Greedy :
Uva :
https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=656
Codeforces :
https://codeforces.com/problemset?tags=greedy
Practice Problems for Bruteforce :
Uva :
https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=639
Codeforces :
https://codeforces.com/problemset?tags=brute+force
Constructive algorithm টা codeforces tag ধরে Practice করলে হবে।
Practice Problems for Constructive algorithm:
Codeforces : https://codeforces.com/problemset?tags=constructive+algorithms
Sorting শিখবা নিচের Link ২টি থেকে :
Bubble sort : https://www.geeksforgeeks.org/bubble-sort/
Insertion Sort : https://www.geeksforgeeks.org/insertion-sort/
Sorting এর আরও Algorithm আছে। তবে আপাদত Bubble আর Insertion Sort শিখলেই হবে।
এখানে একটি ব্যাপার মাথাই রাখতে হবে যে Codeforces থেকে Topicwise or Tagwise Practice করার সময় Problem এর Rating যাতে তোমার Deficulty level এর থেকে বেশি Hard না হয় সেদিকে খেয়াল রাখতে হবে।
আর যখন দেখছ যে Uva or Codefores এ same Topic এর এই Problem গুলো বিরক্ত লাগছে অথবা Problem গুলো এত Hard হয়ে গিয়েছে যে নিজে নিজে আর পারছ না তাহলে পরে Practice করার জন্য রেখে দাও। আর Brute Force, Greedy, Constructive, এই Topic গুলা শিখার সাথে সাথে Codeforces এ এই Topic গুলার Tag ধরে ৮০০-৯০০ Rating এর Problem Solve করতে থাকবা। এর পাশাপাশি Math Tag এর Problem ও Solve করবা। অনেক Beginner এর একটা ভুল ধারনা থাকে যে Competitive Programming এর জন্য Math আলাদা ভাবে শিখতে হয়। কিন্তু এই ধারনা ভুল। Competitive Programming কোনো Math Exam না। এটা Problem Solving এর Competition. তাই Codeforces থেকে শুধু Math Tag Problem Solve করাটাই Enough. আর আমরাতো ইন শা আল্লাহ সামনে Number Theory শিখব। তখন Math এ আমরা আরও Strong হব ইন শা আল্লাহ। তাই আপাদত Codeforces থেকে Math tag Problem Solve করলে হবে।
আর হ্যাঁ Codeforces এ Practice করার সময় যদি ৩০ মিনিটের মধে Solution Idea না পাও তাহলে Editorial পড়ে ফেলবে। বেশি চিন্তা করে সময় নষ্ট করা যাবে না। আমাদের অনেক বেশি Problem Solve করতে হবে। যত বেশি Problem Solve করব ততো Experience আর ততো Different Way তে আমরা New Problem কে Attack করতে পারব ইন শা আল্লাহ। তবে হ্যাঁ ৩০ মিনিট চিন্তা মানে এই ৩০ মিনিটে তুমি যত ভাবে পারবে তত ভাবে Problem কে Full Force এ Attack করতে হবে। কিছুক্ষণ Mobile দেখলা, কিছুক্ষণ পরিবেশ দেখলা আবার কিছুক্ষণ বিয়ে নিয়ে চিন্তা করলা এভাবে হলে হবে না।
এখন তোমরা উপরে দেয়া Topic গুলো শিখা, Topic wise Problem Practice, আবার Codeforces এ Practice করতে করতে ২ মাস মত চলে যাবে। এই ২মাস এ daily ৩-৫টা Codeforces ৮০০-৯০০ Rating Problem Solve করলে তোমার এতদিন এ ৮০০-৯০০ Rating এর ১৫০-২০০ টা Problem Solve হয়ে যাওয়ার কথা। কিন্তু যদি না হয় তার মানে তুমি Consistently Practice করনি।
Consistent Practice is Key to Success :
দেখ। Competitive Programming এ Improvement এর মুল চাবিকাঠি হল Consistent Practice. এখনে Consistency and Discipline অনেক Important একটি Factor. তুমি Week ২দিন ৮ ঘন্টা Practice করার থেকে Daily ২ ঘণ্টা Practice করা অনেক বেশি Effective. এই Daily at least ২ ঘণ্টা Practice করাটাকেই আমি Consistent Practice বলছি যা তোমার অনেক বেশি Problem Solving Skill Develop করবে। তাই যেভাবেই হক। Fast and Efficient Improvement এর জন্য Daily Practice করবে, Daily ৩-৫টা Problem Solve করবে আর যে দিন অনেক বেশি Busy থাকবে সে দিনও যাতে at least ১টা Problem solve কর। এতে হবে গিয়ে যে Problem Solving তোমার Nature হয়ে যাবে। একটা discipline এর মধ্যে পরে যাবে ইন শা আল্লাহ। মনে রাখবে Problem Solving এ লেগে থাকার জন্য Motivation লাগবে, যেমন : Problem solving মজা লাগা, Final year exam complete করার আগে Job পাওয়া, Google, Amazon এর মত Company এর Interview crack করতে পারা, Onsite contest এ ভাল করা, Codeforces ভাল Rating, World Finalist হতে পারা, এগুলা সব Motivation. কিন্তু Competitive Programming এ Improvement এর জন্য লাগবে Consistent Practice আর Discipline.
আর হ্যাঁ কোন Rating এর কিয় টি Solve করেছ তা দেখতে পাবে Cf Visualizer এ গিয়ে।
Mark করা Feild এ তোমার Codeforces Username/Handle দিয়ে Enter দিবা।
নিচে Scroll করে এখান থেকে দেখতে পাবে কোন Rating এর কয় টি Solve করেছ।
Practice 900–1000 Rated Problems and Learn C++ Standard Template Library:
এখন যারা Consistent Practice করেছ তারা এত্তো গুলা Topic আর এত্তো গুলা Problem Solve করার পর তোমাদের মধ্যে ইন শা আল্লাহ একটা Confidence চলে আসবে এবং এখন তোমরা Programming Contest এ নামার জন্য প্রস্তুত। হ্যাঁ এর আগেও তোমরা Programming Contest শুরু করতে পার তাতে কোনো Problem নাই। বরং আরও ভাল। এখন তোমরা Codeforces Div-3, Atcoder ABC round করা শুরু করবে। এই ২টি Round হচ্ছে সবচাইতে Easy Round. আর পাশাপাশি Codeforces এ Practice চাইলিয়ে যাবে। আর যেহেতু ৮০০-৯০০ Rating এর Problem ১৫০-২০০ টি Solve করেছ তাই এখন এই Rating এর Problem গুলি Solve করে তেমন লাভ হবে না। এখন তোমার Practice Problem এর Difficulty বাড়াতে হবে। তাই এখন তুমি ৯০০-১০০০ Rating এর Problem Practice করবে। তবে এর আগেই যদি দেখ যে ৮০০ Rating এর Problem ১৫ মিনিটের মধ্যে Solve করে ফেলতে পারছ তাহলে তখনই ৯০০-১০০০ Rating এর গুলো Practice শুরু করে দিবে। কারণ আমদের Problem এর Difficulty বাড়াতে হবে Improvement এর জন্য। আবার হুট করে Improvement এর জন্য অনেক বেশি Rating বাড়াতে যেও না। এতা লাভের চাইতে লোকশান বেশি হবে। কারণ Problem Rating তোমার level থেকে অনেক বেশি হলে তুমি ওই Problem Solve করতে অনেক সময় লাগবে। আর বেশির ভাগ সময় তা Solve এ করতে পারবে না। আমাদের Problem Solving skill আর Thinking Skill বাড়ানোর জন্য আমাদের Difficulty level থেকে Slightly Difficult Problem Practice করতে হবে, Huge Difficult না।
Codeforces Contests : https://codeforces.com/contests
Atcoder Contests : https://atcoder.jp/contests/
Do Up solving and Keep Patience:
এখন Contest এর বেপারে একটা জিনিস Clear করেদেই। Contest এ শুরর দিকে একটাও Solve করতে পারবে না। অথাবা পারলে ১টা পারবে। তারপরও Practice চালাই যেতে হবে। দেখবা Practice করতে করতে আস্তে আস্তে ২টা করতে পারছ। তারপর ৩টা আর একদিন হটাত দেখবা যে আল্লাহর রহমতে পুরা Problem Set Solved. এভাবে Gradually Improvement হবে ইন শা আল্লাহ। কোনো একটা Contest এর পর যে Problem গুলা Solve করতে পার নাই কিন্তু পারার উচিৎ ছিল ওগুলা Solve করে নিবে। আবার কোনো Friend or mate যার skill তোমার Level এর সে যা যা Solve করেছে ওই Contest এ এবং Contest এর পরে, সেই Problem গুলাও Solve কর।
Don’t Compare Yourself with Others :
এখানে Contest এর বেপারে একটা Important কথা বলি। অনেক Competitive Programmer এর Contest এ ভাল না করা আর Frustrated হয়ে Contest ছেড়ে দেয়ার পিছনে একটা বড় ভুমিকা রাখে Contest Time এ Ladder Board Check করা। কখন ভুলেও Contest চলাকালিন Ladder Board দেখবা না। তোমার Friend, Senior কে কোনটা Solve করেছে, কইটা Solve করেছে এগুলা check করবা না Contest Time এ। ধর তোমার থেকে Weak or Same Skill এর একজন Codeforces Div-3 তে B solve করেছে আর তোমার B এর Idea মাথাই আসে না। তোখন কিন্তু তুমি হতাশ হয়ে যাবে আর Contest ছেড়ে দিতে ইচ্ছা করবে। তাই ঠান্ডা মাথাই Contest দিতে বসবে, নিজে যা পার Relax এ Solve করা শুরু করবে। কে কি করছে দেখার দরকার নেই। আর এই ব্যাপার টি Normal Practice এও Applicable. তোমার Friend কি কি শিখে ফেলেছে, কত Problem Solve করেছে, কত Rating করে ফেলেছে এগুলি দেখে হতাশ হবে না। বরং তুমি কি কি পার, কি কি শিখা উচিৎ, গত মাসে তুমি যা জানতে তার থেকে বেশি জান কিনা, যে Level এর Problem Solve করতে এখন তার থেকে আরও Hard Problem Solve কর কিনা এই ব্যাপার গুলাতে Focus কর। তোমার Competitor তুমি নিজে, তোমার Comparison করতে হবে তোমার নিজের সাথে, তোমার Friend এর সাথে না। হ্যাঁ তোমার Friend কি কি শিখেছে তুমিও তা শিখা শুরু করতে পার, তার মত করে Practice করতে পার, তাকে Follow করতে পার, কিন্তু তার সাথে Comparison কখন করবে না।
যখন ১৫০-২০০ টা ৮০০-৯০০ Rating এর Problem Solve করছিলে, তখন তোমরা একটা বেপার খেয়াল করবে যে তুমি মাঝে মাঝে একটা Problem পড়ার পর Idea পাচ্ছ কিন্তু ওই Idea Implement করেতে পারছ না। এর একটা কারণ হচ্ছে তুমি এখনো নতুন। তাই Fast Implement করতে পারার Skill আসতে আরেকটু সময় লাগবে। আরেকটা কারণ হচ্ছে C++ Standard Template Library ( C++ STL ) না জানা। STL এ অনেক Powerful Data Structure আছে যা তুমি ব্যবহার করতে পারবে, না শিখে। সুধু Declare করবে আর ব্যবহার করবে যে ভাবে Array ব্যবহার কর। আর এই STL অনেক Problem এর Implementation Easy করে দিবে। তাই এখন সময় হল STL শিখার।
C আর C++ এর মধে তেমন কোনো Difference নাই। printf, scanf, If-else, while, for, do-while loop, function, array, string সব এ একি। মুল কথা হল তুমি .cpp file এ C program লিখতে পারবে। কিন্তু C++ এ Extra আছে STL আর OOP. OOP আমাদের Competitive Programming এ দরকার নেই। কিন্তু STL ছাড়া আমরা চলতে পারবনা Competitive Programming এ।
এখন আমার বানানো C++ STL series দেখে তুমি C++ STL এ ইন শা আল্লাহ দক্ষ হতে পারবে:
C++ STL Playlist : https://youtube.com/playlist?list=PLoa_roVVsxA1hNTFt0fO9-DNsX_STaR3h
এই Playlist Complete করার পর তোমার যা যা শিখা হবে:
- Vector
- String
- Built in sort function and more
- pair
- map
- set
- multiset
- queue
- Priority queue
- stack
এই Playlist এ আমি C++ STL এর খুটিনাটি Discuss করেছি এবং ৪০টি Practice Problem এর মাধ্যমে দেখিয়ে দিয়েছি যে কিভাবে STL এর Different Topic আমরা Problem Solving এ Apply করব। এই Playlist দেখার জন্য C++ জানা লাগবে না। Direct দেখা শুরু করে দিতে পারবে। আল্লাহর রহমতে সব দেখান হয়েছে।তোমরা চাইলে cin, cout আর #include<bits/stdc++.h> কিভাবে ব্যবহার করে দেখে নিতে পার।
আর হ্যাঁ একবসাই পুরা Playlist শেষ করতে যেও না। সব তখন মাথার ওপর দিয়ে যাবে। Normally Codeforces এ Practice করবা আর সাপ্তাহে ২-৩টা ভিডিও দেখবে। তাহলে ইন শা আল্লাহ খুব সহজে Topic গুলো শিখতে আর Apply করতে পারবে।
এখন Playlist টি follow করে STL শিখা, Topic গুলো Problem Solving এ Practice করা, পাশা পাশি codeforces practice করা এগুলা করতে করতে আরও যাবে ২মাস। এই ২মাসে তোমার ৯০০-১০০০ Rating এর Problem ১৫০-২০০ টা Solve হয়ে যাবে সাথে অনেক গুলো Contest ও দেয়া হয়ে যাবে। আর Codeforces এর Rating ও ৯০০+ হবে। আর না হলেও Problem নাই, তোমার ভিতরে ৯০০+ Rating এর Skill চলে এসেছে এখন সুধু ঠান্ডা মাথাই Contest করে codeforces profile এ আনতে হবে।
Practice 1000–1100 Rated Problems and Learn Binary Search:
যেহেতু তোমার Codeforces এ ১৫০-২০০ টা ৯০০-১০০০ Rating এর Problem Solved হয়ে গিয়েছে। এখন Practice Problem এর Rating ১০০০-১১০০ করে ফেল আর Codeforces Div-3, Atcoder ABC এর পাশা পাশি Codeforces Div-2 আর Atcoder ARC Round attend করা শুরু কর।
এখন তুমি STL শিখার পর আরও কিছু Basic Topic শিখতে হবে। নিচে দেয়া Serial এ সেগুলি শিখে ফেল :
- Partial Sum
- Basic Binary Search
- Upper Bound
- Lower Bound
- Integer and Fractional Bisection
Partial Sum তুমি আমার নিচের ২টি ভিডিও দেখে শিখে নিতে পার :
Part-1: https://youtu.be/waM-HRJYi6o
Part-2: https://youtu.be/yNW_4p35P2U
আর Binary Search, Bisection এগুলা পড়বে শাফায়েত ভাইয়ের Blog থেকে। এই Blog টি সম্পূর্ণ বাংলাতে লিখা আর Competitive Programming এর অধিকাংশ Basic আর Intermediate level Topic সহজ করে আর Problem এর ওপর Base করে শিখিয়েছেন শাফায়েত ভাই। তোমরা এই Blog টি অবশ্যই Follow করবে।
Basic Binary Search, Upper Bound, Lower Bound :
http://www.shafaetsplanet.com/?p=2279
Integer and Fractional Bisection :
http://www.shafaetsplanet.com/?p=2295
এখন Binary Search Tag এর Problem Codeforces, Uva, LightOj আর LeetCode থেকে Practice কর। যতটুকু পারা যায় কর। যখন দেখছ যে Difficulty Level বেড়ে যাচ্ছে তখন Off. এখানে একটা কাজ করতে পার। প্রথমে Binary Search Topic ধরে ধরে Practice করবে LeetCode এ। যখন দেখবে যে Solve করতে করতে LeetCode এর Problem গুলি অনেক Hard হয়ে গিয়েছে মানে তোমার Level থেকে অনেক Hard তখন Uva তে গিয়ে Solve করা শুরু করবে। যখন দেখবে যে Solve করতে করতে Uva এর Problem গুলি অনেক Hard হয়ে গিয়েছে মানে তোমার Level থেকে অনেক Hard তখন LightOJ তে গিয়ে Solve করা শুরু করবে। যখন দেখছ যে LightOJ তেও এখন আর তোমার Level এর Binary Search Problem নেই। তখন Codeforces এ গিয়ে Binary Search Tag এর Problem Solve করবে। এভাবে Uva, LightOJ , Codeforces Cycle চলতে থাকবে। আর পাশা পাশি Codeforces Rating wise Problem solving তো থাকবেই।
Uva Binary Search Practice Problems :
https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=661
https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=662
LightOJ Binary Search Practice Problems :
https://lightoj.com/problems/category/binary-search
Codeforces Binary Search Practice Problems :
https://codeforces.com/problemset?tags=binary+search
LeetCode Binary Search Practice Problems ( Solve Difficulty wise ) :
https://leetcode.com/tag/binary-search/
Practice 1100–1200 Rated Problems and Learn Number Theory:
এখন Binary Search শিখে Practice করার পাশা পাশি Codeforces Regular Practice, Codeforces Contest, Atcoder Contest অনেক কিছু করেছ। আর এতদিনে তোমার ১০০০-১১০০ Rating এর Problem ১৫০-২০০ টি Solve হয়ে গিয়েছে আর তোমার Codeforces Rating ১০০০+ হয়ে গিয়েছে। তাই এখন Practice করবে ১১০০-১২০০ Rating এর Problem. তবে এর আগে ১০০০ Rating এর গুলি ১৫মিনিটের মধ্যে Solve করার Skill চলে আসলে সাথে সাথে ১১০০-১২০০ এর গুলি Practice শুরু করে দিবে। এর পাশা পাশি শিখবে Basic Number Theory নিচের Serial অনুসরণ করে :
- Harmony Series
- Sieve of Erathros ( Prime generation )
- Prime Factorization
- Number of Divisors
- Divisor Symmetry Function
- Sum of Divisors
- Modular Arithmetic
Harmony Series আমার ভিডিও দেখে শিখতে পারবে। বাকি Topic গুলো শাফায়াত ভাই এর Blog আর Forthright থেকে শিখতে হবে। আর পাশা পাশি তো Codeforces Practice করবা। এখানে আগের মত একটা কাজ তুমি করতে পার। Daily Codeforces Practice করবা ৩-৫টা অথবা আরও বেশি আর Week এ ১-২টা Topic শিখবা। তাহলে Topic শিখা আর Problem Practice এ একটা Balance পাবে ইন শা আল্লাহ।
Harmony Series :
Sieve of Erathros ( Prime generation ) :
http://www.shafaetsplanet.com/?p=624
Prime Factorization :
https://forthright48.com/prime-factorization-of-integer
Number of Divisors :
https://forthright48.com/number-of-divisors-of-integer
Divisor Symmetry Function :
https://forthright48.com/divisor-summatory-function
Sum of Divisors :
https://forthright48.com/sum-of-divisors-of-integer
Modular arithmetic :
https://forthright48.com/introduction-to-modular-arithmetic
http://www.shafaetsplanet.com/?p=936
Practice 1200–1300 and 1300–1400 Rated Problems and Learn Graph Theory:
এখনে Number Theory শিখতে শিখতে তুমি এত দিনে ১৫০-২০০ টি ১১০০-১২০০ Rating এর Problem Solve করে ফেলেছ আর তোমার Current Maximum Codeforces Rating 1100+ হওয়ার কথা। এবার তুমি Practice করবে ১২০০-১৩০০ Rating এর Problem আর পাশাপাশি Codeforces, LightOJ, Uva আর LeetCode থেকে Number Theory Tag ধরে Problem Solve করবে। আগের মতই প্রথমে LeetCode থেকে করবে। যখন LeetCode এর Number theory Problem গুলো Hard লাগা শুরু করবে তখন Uva থেকে করবে। যখন Uva এর Number theory Problem গুলো Hard লাগা শুরু করবে তখন LightOJ থেকে করবে। যখন LightOJ তে Hard লাগা শুরু করবে তখন Codeforces থেকে করবে। আবার LeetCode, Uva, LightOJ, Codeforces এভাবে চলবে।
এখন যেহেতু ১২০০-১৩০০ Rating এর Problem Solve করছ এখন তুমি শিখবে Basic Graph Theory. Competitive Programming এর একটি Important Topic. Graph Theory. Competitive Programming ছাড়াও এটি তোমার University এর Alogrithm Course আর Data Structure Course এ কাজে দিবে। এটি শিখবে Competitive Programming 3 বই থেকে। Graph Theory থেকে নিচের Serial এ Topic শিখা শুরু কর:
- Depth First Search
- Breadth First Search
- Finding Connected Components
- Flood Fill
- Topological Sort
- Bipartite Graph Check
- Graph Edges Property Check
তুমি চাইলে Graph Theory শাফায়েত ভাই এর Blog থেকেও শিখতে পার। প্রত্যেক Topic শিখে সেই Topic এর অনেক গুলি Problem Solve করে ফেলবে যাতে Topic টি একেবারে Feel করতে পার।
Dfs and Bfs Practice Problems :
LeetCode :
https://leetcode.com/tag/depth-first-search/
https://leetcode.com/tag/breadth-first-search/
https://leetcode.com/tag/graph/
Uva :
https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=666
LightOJ :
https://lightoj.com/problems/category/bfs-dfs
Codeforces :
https://codeforces.com/problemset?tags=dfs%20and%20similar
Finding Connected Components and Flood Fill Practice Problems :
Uva :
https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=667
LightOJ, Codeforces & LeetCode : See Previous Links.
Bipartite Graph Check Practice Problems :
Uva :
https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=669
LightOJ, Codeforces & LeetCode : See Previous Links.
Topological Sort :
Uva :
https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=668
LeetCode :
https://leetcode.com/tag/topological-sort/
LightOJ &Codeforces: See Previous Links.
Practice 1400–1500 and 1500–1600 Rated Problems and Learn Dynamic Programming:
কিন্তু Graph Theory এর Basic শিখে দক্ষ হতে অন্য Topic গুলির তুলানতে একটু বেশি সময় লাগবে। তাই তোমার ৩-৪ মাস লাগতে পারে Basic Topic গুলি শিখে Different Online Judge এ Practice করে Confident হতে। আর এত দিনে তুমি ১৫০০-২০০ টি ১২০০-১৩০০ Rating এর Problem Solve করে Practice Problem এর Rating বাড়িয়ে ১৫০-২০০ টি ১৩০০-১৪০০ Rating এর Problem solve করে ফেলার কথা। আর সেই সাথে তোমার Maximum Codeforces Rating 1300+ হওয়ার কথা। আর এখনি সময় Dynamic Programming (DP) শিখার। তবে সুধু Graph Theory দীর্ঘ দিন ধরে শিখতে যদি Boring লাগে তাহলে Graph আর DP parallelly শিখতে পার। কোনো সমস্যা নেই।
Dynamic Programming নিচের Topic গুলি Serially শিখবে:
- Fibonacci
- Shortest Path Problem Using Dynamic Programming
- Longest Increasing Subsequence ( LIS )
- Longest Common Subsequence ( LCS )
- 0–1 Knapsack & Coin Change.
DP আমরা শিখব শাফায়েত ভাইয়ের Blog থেকে।
Fibonacci :
http://www.shafaetsplanet.com/?p=1022
Shortest Path Problem Using Dynamic Programming: http://www.shafaetsplanet.com/?p=1072
Longest Increasing Subsequence ( LIS ):
http://www.shafaetsplanet.com/?p=1211
Longest Common Subsequence ( LCS ):
http://www.shafaetsplanet.com/?p=3602
0–1 Knapsack & Coin Change:
http://www.shafaetsplanet.com/?p=3638
Dynamic Programming Practice Problems :
0–1 Knapsack Practice Problems :
Uva :
https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=652
Coin Change Practice Problems :
Uva :
https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=653
Longest Increasing Subsequence ( LIS ):
Uva :
https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=651
LeetCode DP Problems :
https://leetcode.com/tag/dynamic-programming/
তাছাড়া LightOJ তে Basic and Classical DP Problem পাবে অনেক। নিচের Link থেকে Easy To Hard Practice করতে থাক।
LightOJ DP Problems :
https://lightoj.com/problems/category/dp
আর Codeforces এর DP Tag থেকে তো Practice করতে হবেই:
Codeforces DP Problems :
https://codeforces.com/problemset?tags=dp
আর হ্যাঁ। Atcoder এ একটি Dynamic Programming Long Contest হয়েছিল। সেই Contest এ Basic to Advance DP Topic থেকে ২৬টি Problem set করা হয়। Problem গুলো Easy to Hard এ Sorted করা। তাই Serially সে Problem গুলাও Practice করবে।
AtCoder DP Contest :
https://atcoder.jp/contests/dp/tasks
এখন Graph Theory এর মতোও DP এর Basic Topic গুলা শিখে Different Online Judge এ Practice করতে তোমার ৩-৪ মাস লেগে যাবে। আর তত দিনে তুমি প্রথমে ১৪০০-১৫০০ Rating এর ১৫০-২০০ টি Problem Solve করে ফেলবে। তখন ইন শা আল্লাহ তোমার Maximum Codeforces Rating 1400+ (Specialist) হবে। এরপর তুমি ১৫০০-১৬০০ Rating ১৫০-২০০ Problem Solve করে ফেলবে আর তখন তোমার Maximum Codeforces Rating 1500+ হবে। এখন তুমি Practice করবে ১৬০০-১৭০০ Rating এর Problem.
Practice 1600–1700 Rated Problems and Practice Previously Learned Topics:
এখন তুমি Basic C , C++ STL, Greedy, Bruteforce, Contructive Algorithm, Binary Search, Number theory, Basic Grapth Theroy, Basic Dynamic Programming পার আর মোটামুটি এগুলা থেকে Codeforces, Uva, LightOJ, LeetCode এ Practice ও করেছ। এখন ১৬০০-১৭০০ Rating এর Problem এর পাশা পাশি এগুলা উপরে দেয়া OnlineJudge থেকে আরও Practice কর। এভাবে আর ২-৩মাস Practice করলে তোমার ১৫০-২০০ টি ১৬০০-১৭০০ Rating এর Problem Solve হয়ে যাবে আর Basic সব Algorithm Data Structure এর ওপর একটি ভাল দক্ষতা চলে আসবে। আর সাথে ইন শা আল্লাহ তুমি Codeforces 1600+ Rating (Expert) হতে পারবে । এখন এই সব Topic কিন্ত মাত্র শুরু। এত দিন যা শিখেছ তা হল Basic Topic. তোমাকে Intermediate আর Advance Topic ও শিখতে হবে। তবে Basic Topic শিখে ১৬০০+ হতে হতে তুমি Actual Track বুঝে যাবে ইন শা আল্লাহ। তখন ইন আল্লাহ নিজে নিজে আগাতে পারবে।
All Resources Altogether :
Books :
- Teach Yourself C by Herbert Sheidt
- Competitive Programming 3 by Steven Hamil & Felix Halim
Blogs :
- http://www.shafaetsplanet.com/
- https://forthright48.com/category/cpps/number-theory
- https://cp-algorithms.com/
Online Judges with Regular Contest :
- https://codeforces.com/
- https://atcoder.jp/
- https://leetcode.com/
- https://www.codechef.com/
- https://toph.co/
Online Judges without Regular Contest :
Profile checker and Solve Problem Counters :
Where You Can Get Personal Help And Guideline From Me?
Discord Server :
Facebook Group :
Where I take Courses and Live Classes? CPS Academy :
YouTube Channel:
Facebook Page :
My Profiles :
LinkedIn :
Codeforces :
Stopstalk :
Facebook :
GitHub :