Hello there. I am writing this blog to share with you my experience on being Expert in 5 months and to help people who want to imporve their skills in Competitive Programming and even for those who want to start in this field.

And now, let’s start with some important tips from my point of view :

• **Set your own goals** : The good spirit is to fix goals to achieve, for me my goal was to be the first Tunisian who achieve ICPC. And before ICPC, I must be qualified to ACPC (Africa & Arab Collegiate Programming Championship). So I worked hard in the first 4 months, and I was qualified to ACPC by having the 3rd Place in TCPC (Tunisian Collegiate Programming Contest). And to be honnest, it was unexpected for me. But it happens.

• **You should like what you are doing** : If you like a subject, you would be good at it.

• **while(true) {** **practice_and_never_give_up () ;** **}**

• **Select the problems according to the topics you are targeting** : This will be very helpful for you during the practice.

• **Learn new data structures and algorithms** : learning new data structures and algorithms (like DFS, BFS, Dijkstra ect ..) will help you to improve your skills. Also, some maths skills can help you to solve some problems faster (Number theory, combinatorics, ect …)

• **Avoid easy problems** : Beginners' problems are a waste of time for who have mastered the basics of competitive programming.

• **Focus on your performance during contests** : don’t look for the scoreboard during the contest. Foncus on your performance and try to solve the problems efficiently. You will sometimes encounter a few defeats and even have a low rating, never mind, it’s normal, try to know your weaknesses and fix them.

• **Check editorials if you failed** : Sometimes you will spend hours trying to find a solution for your problem; in this case you read some lines from the editorial and keep trying again in the problem until you solve it. Even if you can’t solve it, don’t worry, you can read the solution and understand the trick, then re-solve the problem by yourself again.

I hope those tips help you. I want to thank Mtaylor and ziedom for inspiring me and helping me during my trainings.

Congrats!

Very Informative. I'll be an expert in the next round with your approach.

Good luck

Nice you beat me by a month. Congrats!

Thanks bro Good Luck

Congrats, and I bet you by a month :)

Congrats and I bet you by a month :)

Congrats and I

beatyou by a month :)Congrats and I beat you by a month :)

Congrats and I don't like violence :)

LoL the next one who will say that would be born with an expert rank

Congrats, and i bet you by a month :)

Congrats to both of you! Ahmadsm2005 and KaryGauss03, would you mind sharing some resources for math skills you found useful? I'm having a hard time finding those.

can you kindly tell what all data structures and algorithms like in number theory there are so many algos so among those which all you learnt you learnt along with practice? did you solved cses problem set?

PS: Congrats for becoming expert, wishing you more success. Sorry for my bad English too :-)

Why people are downvoting my comment and Question

Sadly because your English is really too bad. :(

I guess you wanna express that what algorithms he has learnt, like DFS or blahblahblah.

For basics:

Recursion (maybe a little more Divide and Conquer)

Greedy

Prefix Sum

Binary Searching

Sortings (just being able to use std::sort in C++ and reload the comparing function is enough)

Searching:

DFS

BFS

Dynamic Programming:

Knapsack

Interval

DP On Trees/DAGs

Bitmasks (a little maybe)

A LOT OF Different DP

Strings:

Maths:

Bitmasks (a little)

Binary Exponentiation

Primes (a little)

Data Structures:

Stack

Queue

List

Union-Find

Heap

Monotonic Queue (a little)

Binary Indexed Tree

Segment Tree (only the easiest one)

Able to use std::set and std::map in C++

Graphs:

DFS

BFS

Trees

DAG

Minimum Spanning Tree

Sortest paths (I strongly recommend Dijkstra, that's enough.)

Don't get scared. Just learning the basics of the algorithms and try to improve in contests. The skill to judge what algorithms to use on a problem is also important. You can try to pick problems with difficulties as high as or a bit higher (like 300 points) than your rating.

UPD: Learning how to analyze your solutions complexity is VERY important.

Thanks a lot :-)

And sorry again for my poor English :-(

There are lots of people who actually like CP but are hardstuck in Div. 3.

Apart from the primitive ones, there are barely any algorithms that you will need to get to blue (or even yellow these days, for that matter).

If you focus on your performance, you will get distracted by it regardless of how well you're doing. Instead, focus on the problems.

Sometimes a problem that is supposed to be hard is easy, the scoreboard helps you with finding those. In the contest I ranked up to IM, I would have lost rating if I hadn't checked the scoreboard because I wouldn't have known that that particular div1D was easy.

1) Yes, there are people who love CP and find it hard, but they won't give up, they will keep trying and trying. This is why this is an important point. 2) You can't focus on your performance without focusing on the problems. 3) When I said don't look at the scoreboard, I mean don't be stressful about the ranking, you can check which issues are easy or not without looking for the ranking. Just check the number of ppl who solve each problem. The main idea is to look at the CP as a skill to improve, for your job interview or I don't know, and not as a rating.

Thank you for your remarks, can you please share your experience with us ?Not giving up doesn't mean that you are good, neither does it mean that you are improving. Don't you think it would be disheartening and insulting to hear "If you like it, you will be good at it" if you love CP and you have been trying for months if not years to improve but to no avail?

How did you get that idea? There are lots of people that just start complaining about how they're going to lose rating on Discord after getting a little stuck on an early problem, or people that start panicking and start calculating which problems they need to solve in order to not lose rating. I've seen them myself, do you think I'm making this up?

If so, I agree.

Yeah right, any way I am talking about my experience, and my point of view

(or even red these days, for that matter). But the OP was talking about very basic algorithms like DFS, BFS etc that are not well known to newbies, so it'll be good if they learn those.

That's true, I would also like to add that you can sometimes guess a lot of things about a certain problem's solution just by looking at the standings. (For example, "a lot of people solved this problem in 5~10 minutes, there is probably a hidden observation which will make this solution a 2 liner")

Idk why are u and thermodynam1c is forgetting to tell that without seeing the leader board one can see the dashboard if he wants to see the number of submissions of each problem :(

Doesn't that have the same effect as looking at the leaderboard?

No, not at all... On leader board one can see his rank and his friends' rank which may give tension to him like his friends did a question earlier than him...

While on dashboard u can only see the question and number of AC solutions( which will help him to recognize if a question that is supposed to be hard is easy).Wouldn't seeing that thousands of people solved a problem that you're completely stuck on also give anxiety? Why is seeing your friends any different? I guess for some people seeing the friends leaderboard might be worse, but I still don't think that looking at the dashboard won't make you anxious if you're bothered by the friends leaderboard.

(or even IGM these days, for that matter, not talking about me but other people)

Wow, just find that my first contest is on Jan/11/2019 and I became expert on Jun/11/2019, which is exactly 5 months :)

I just find it took me 2 months to become expert with 2nd contest on 26 march (during 1st contest, I didn't even know how to take input XD) and becoming expert on 26 may.

how did you improved so fast ?

I just followed this.

And just had good mathematical background

What do you think should be the right way to practice? a) Virtual contests or b) solving random problems ??

For beginners, focus should be more on solving random 'not too hard' problems

Hi guys I am doing competitive coding for some time now and got quite experience. I want to know while solving binary search problems how you guys get to know whether it would work or not in one go. for me its always trial and error and I always end up in an infinite loop. Is there some fix method and how to know if some method would work or not

A good technique:

if you are looking for 1st position satisfying some condition do this:

mid=(left+right)/2;if(some_condition()) left=mid+1;else right=mid;if you are looking for last position satisfying some condition do this:

mid=(left+right+1)/2;if(some_condition()) left=mid;else right=mid-1;what about left< right or left <= right. Also both of these conditions are failing in a problem (painter's partition)

Can you link the problem?

https://www.interviewbit.com/problems/painters-partition-problem/

this is my code

What is that k in isPossible() function

K is the mid value which would change according to solve function.

It's really an incentive for me, thanks a lot. Also, Congratulations on becoming expert!

Thank you & Good luck !

Congratulates!

Congratulations too!

When I started, I was totally garbage.

By the way, the spelling of the previous message is quite strange :D

*I don't know this website previously.

Thank you, Wish you all the best

Congrats!

Thank you, Wish you all the best !

Good Job !

Thank you so much bro !

from where did you solve problems and learn data structures?

The famous book CP3 and competitive programmer's handbook Hackerearth, geeksforgeeks and leetcode. And ofc Codeforces

Awesome achievement! Keep it up <3