Dear Codeforces Community.
Today I want to share some ways to practice competitive programming and getting rating. I think this is helpful for those who is practicing competitive programming hardly but rating is sluggish. (By the way, on July 17th, I have a project of competitive programming said CombNaf in Japan. I did a lecture about this. Great thanks to the CombNaf's organizer is nafmo2.)
I will write this by 4 steps: rating 1000 --> 1250, 1250 --> 1500, 1500 --> 1750, 1750 --> 2000, in Codeforces Rating System.
Before writing about each step, I wrote it as premise: You don't have to do this way. This is just a way to practice. Ways to practice is different among people, so I think this may not the best, but I hope this is useful.
Step 0: Some types of contest (A knowledge)
In order to explain step 1-5, I wrote about the types of programming contest.
Codeforces
- This judge. There are Div.1 problems and Div.2 problems. The number of contest is mainly 5-6.
- The problems of Div.2 said Div2 A, Div2 B, Div2 C, Div2 D, Div2 E,... in order.
- The problems of Div.1 said Div1 A, Div1 B, Div1 C, Div1 D, Div1 E,... in order.
- Problems are sorted by difficulty in each contest.
AtCoder
- There are ABC (AtCoder Beginner Contest) / ARC (AtCoder Regular Contest) / AGC (AtCoder Grand Contest) in AtCoder, but in this blog I will explain about ABC / ARC.
- There are 4 problems in ABC and ARC.
- Each problem in ABC is said ABC-A, ABC-B, ABC-C, ABC-D, and each problem in ARC said ARC-C, ARC-D, ARC-E, ARC-F.
- Problems are sorted by difficulty.
- In each contest, ABC-C and ARC-C is the same problem, and ABC-D and ARC-D is the same problem.
TopCoder
- There are Div.1 and Div.2, and there are contest for each division.
- In Division 2, there are three problems, which is said that Div2 Easy, Div2 Medium, Div2 Hard.
- In Division 1, there are three problems too, which is said that Div1 Easy, Div1 Medium, Div1 Hard.
- Easy is the easiest question of three, and hard is the hardest question in these three as naming.
Step 1: Rating 1000 --> 1250
In order to gain rating from 1000 to 1250, you should solve at least one problem in Div.2 contest in Codeforces. In AtCoder, 300 points problem is the level of rating 1100-1250. So I suggest these two ways:
- Solve Div2 A 50 problems. When you solved 50 problems, you might be able to solve >80% of Div2 A.
- Solve ABC-C in AtCoder. There are many educational problems in AtCoder Beginner Contest.
In order to solve problems, you should make a Bingo like example.
In addition, most of these problem is easy, especially concept. So you should see editorials if you can't reach idea 10 minutes.
Step 2: Rating 1250 --> 1500
In order to gain rating from 1250 to 1500, you have to solve at least 2 problems faster in Div.2 contest. In addition, the level is as same as TopCoder Div2 Med and AtCoder ABC-D. (ABC-D is little high level for 1250) In addition, there is many educational problems in AtCoder, there is some point to do fast-solving practice in TopCoder, and Codeforces is the target judge. So I suggest these three ways:
- Solve Div2 B 50 Problems. (Most of problems are good quality)
- Solve Div2 Med 50 Problems. (The quality of problem is good, but Java Applet is inconvenience...)
- Solve ABC-D / ARC-D in AtCoder. (A little high level for 1250)
In addition, I think that you should mind fast-solving in latter problems. (After solved 15-30 problems)
In order to mind fast-solving, you should use timer. You should count from "opening problem statement" to "getting AC". If you can, I think that you should make a spreadsheet of problem, solved and time.
Step 3: Rating 1500 --> 1750
In order to gain rating from 1500 to 1750, you have to solve at least 3 problems faster in Div.2 contest. There are a lot of concept problems in Div1 A = Div2 C, and in Div2 only contest you have to solve as fast as possible. I made a table of judge and points to see what to solve easier.
Judge | Concept | Imprementation | Fast solving | Level |
---|---|---|---|---|
Codeforces Div2 C | 50% | o | 50% | 1500-1800 |
TopCoder Div1 Easy | o | x | o | 1500-2000 |
AtCoder ABC/ARC-D | 50% | o | 50% | 1400-1600 |
I suggest these two ways to improve rating as far as see the table:
- Solve Div1 Easy and Codeforces Div2C as the same period. I think if you solve <50 problems for each type, your rating will increase strongly, but I suggest you should solve until satisfied yourself.
- First solve ABC/ARC-D in AtCoder until solve 80% of ARC-D. Second solve Div1 Easy in TopCoder for concept-practice or fast-solving practice.
My rating increased sharply when I started TopCoder Div1Easy, and solved ~50 Div1Easy problems. This is why I suggest TopCoder Div1 Easy for concept-practice.
In addition, you should use timer for practicing fast-solving. You can use competitiveprogramming.info to solve TopCoder Div1Easy, and you can make spreadsheet like following picture to solve TopCoder. (This is example of Div1Med that I am using.)
Step 4: Rating 1750 --> 2000
This is the last step that I can write. In order to gain rating 1750 to 2000, first you must go up to Div1, and you have to compete a little better in Div1. You have two steps, so I divided into two range.
1. Rating 1750 --> 1900
You should solve Div2C faster and stably. So I suggest that practice these two:
- Overcome your weakness (For example, DP problems, Graph Theory, Imprementation, etc.)
- Make your library (For example, RMQ, BIT, Segment-Tree, etc.)
And to overcoming your weakness, I suggest that analyze your time in contest and practice, scoring and make a spreadsheet as follows:
2. Rating 1900 --> 2000
This step's range is only 100, but I think this is difficult as far as see A mystery of CF rating distribution. There are many people in [1900, 2000), but there aren't many people in 2000+. In Div1, there are many concept-main problems. So I think these two are useful for practice:
- Codeforces Div1 B. In the story, the goal is becoming 2000+ in Codeforces. So practicing in Codeforces is the best too to get rating in CF.
- AtCoder ARC-E. ARC-E is 600-900pts in AtCoder, and this is level of rating 1900-2200. In addition, these problem is very like to Codeforces.
These problems are so difficult, so I suggest that you should give up and see the editorials if you can't get any idea though you try over 80-150 minutes. In addition, ARC-E is difficult for 1900, so I think you don't have to mind fast-solving.
Step 5: Extra corner
In extra corner, I suggest two ways to compete well in Codeforces. This is also out of the problem-practice, but I think this is effective. (I did this and I feel this is effective.)
- Do Virtual Contest / Virtual Participation in Codeforces. This is a way of get use to contests.
- Take a rest for 10 minutes before real contests. This is a way to not get panic in the contest. It is also important in the contest on the mental side.
Conclusion
I suggest that five steps to practicing competitive programming. Ways to practice is different from a person to a person, so I don't think you must do this way. But this is one of the effective way I guess. (I think this is not the best because the way to fit is different among people.) I hope it will be useful even a little. (Also, sorry for my poor English.)
Please comment if you have suggestions and questions of this entry, and my way to practice.
But sir , If everyone read your post and star solving according to your advice , then is it possible to get high rating for all?? As codeforces rating system says The summation of rating of contestant is equal before and after contest :)
Actually, no. Given the same resources, different people will use it differently. Given that everyone practices the same problemset, some may still turn out to be better than others because people understand stuff and think differently.
There is another way around.
I know you solved only problem E in Codeforces Round #415, and your rating increased.
But do you think your rating always increases if you just solve Div1 E problem? I don't think so, because there are "Div1 A and B is easy, and Div1 C is easier than normal" contest.
Not always the case. In AtCoder I solved ARC-F once and ARC-E twice (usually I do not solve E until I completely give up on F, which happened few times so far) and my rating range is 600-1200 :/
Edit.
And the problem there is the fact, that the point differences do not reflect the difficulty increase. Quite often solving C and D is worth more or the same as E and sometimes even more than F. So if I managed to solve F or E I do not have time to solve both C and D.
In CF a point value decreases with time. So if you are not quite fast, you can get lower score than solving A+B fast.
Edit2.
As regards AtCoder. The idea of a point value is: AtCoderPointValue/2 = TCPointValue. And even though solving 2 x 250 pts in TC is nowhere near solving 500, that problem does not exist, as there are 3 problems only and each problem is worth more than the sum of all easier problems. In AtCoder there are more problems, so you could get a higher score by solving more simpler problems.
[Tutorial] A Way to get high contribution: From 0 to 100
Write 'bout bullshit.
Will there be a follow-up post on how to get from 2000 to 3000?
In fact, I did a lecture in CombNaf, which is one of the programming event in Japan. The tutorial that I used in CombNaf was from grey to red because my rating is AtCoder was middle of orange then. (Link)
But this is Japanese version, so I have to translate from Japanese to English. In this process, I decided to change the target from AtCoder to Codeforces. But my rating is 2051, middle of purple.
So I thought that I cannot write how to practice for red then in CF Version.
But these days I'm praciting TopCoder Div1 Med for becoming red. There are a lot of concept-main problems in TopCoder Div1Med.
Thanks for the article E869120! It seems really useful and I might give it a try but I would like to clarify some things before I start.
I just had some questons:
1) I was not aware of AtCoder but it seems AtCoder's contests have tasks A,B,C,D ..., so what do you mean when you say "ABC-C in AtCoder."? Do you mean to solve tasks A, B, and C? Then what does the "-C" refer to? Also in step 2 you say "ARC-D in AtCoder", what is "R" for?
2) How exactly can the bingo approach help us in step 1? Is it to solve at least 5 problems horizontally, diagonally or vertically? What's the point of your middle box with the "Is it rated?" question?
3) What do you mean exactly with the "o" and "x" in the table of step 3?
Thanks :)
Answer to 1:
And "ABC/ARC-C" means that you should solve the first problem of ARC (ARC-C) / the third problem of ABC (ABC-C). ABC-C problem and ARC-C problem is the same in each ABC/ARC contests.
Answer to 2:
Answer to 3:
Sorry for my poor English.
Thank you for reading my post.
I'm sure this kind of practice (study, practice solving fast) works before reaching 2600. After that, the strategy wouldn't work well.
What I imagine about rating 2600 (2600 in Topcoder, 3000 in AtCoder): You can write a code very fast without fatal bugs. You know almost every typical algorithms, including LCA, Dinic, FFT, finding bridges, O(N^2 log K) for k-fibonacci, etc.
After 2600, you have to solve once boss problem in the problem set in several rounds, and many problems are not solved by knowledge, reflection or one-step consideration. Those are all creative, ad-hoc problems.
I once heard that in order to tackle with ad-hoc problems effectively, you have to throw yourself into a problem for hours, and try everything you can try, and train your instinct — which kind of algorithm works to certain problems. This is the skill which fast-solving or virtual contests doesn't help you improve.
On the other hand, although I don't like to say this aloud, from this rating zone I feel your latent ad-hoc (or mathematical) power makes a lot of difference. It is often said that IMO gold medalists can be very strong in programming contests once they know typical algorithms and get used to implementation. (Even if the difference derives from how they trained their mathematical skills when they were young,) you can't change what you are. I realized that I wasn't a genius, when I lost to a lot of OI friends in national math olympiad after studying hundreds of hours for that.
But that doesn't mean you can't become a skilled competitive programmer. The practice I said surely change your ad-hoc skills in a long view. Sharpen your intuition, tackle novel problems with it. Neither your friends' solution, official summary, nor textbooks help you training your intuition. Find your way of treating with the problems. I've advanced to DCJ2017 Finals with my intuitive answer of E-large.
That's why I keep saying becoming a red coder is the start of competitive programming.
(P.S. it's often said that a lot of CF hard problems are typical with demanding implementation. If it's truly so, assume the goal as "becoming 3200 in AtCoder" or "advancing GCJ finals" instead. If you're Cuban or Quebecois etc, then I'm sorry for not giving good alternatives to you.)
Sorry for my poor humanity.
"That's why I keep saying becoming a red coder is the start of competitive programming." I've been lying myself for a couple of years then XD
No, seriously, I liked what you said :) It's a little bit extremist I would say but I like it haha, even though I'm not red -yet-.
I would like to know if some top coders feel the same way as you. I feel that something that can help you develop intuition is to explain things to others. (but again, I'm not red xD)
"Legend rank is the beginning of true cultivation"
Has anyone else also tried this and it worked?
So you expect someone to increase rating from 1000 to 2000 within 26 hours.
Been doing the same thing for months now, not improving very well, I am just a specialist now(In real account).
An imaginary account getting real downvotes. :)
I wrote this comment because 1 month passed after published this blog.
Actually, there are many people who wrote a blog which is about "How to achieve 2000+ rating?" or something that relate about rating 2000, from a few years ago to now. Here is the example:
Needless to say, this is only my opinion, but I found there are many people who want to gain to 2000+ rating, including after this blog published, so I recommend to read this blog article carefully. (I did not say that you should do for this way)
To make sure we all understand the core of the post. Hardly practicing means almost no practicing. Is that what you wanted to say?
Well, I think this blog is targeted to person who thinks like "I like programming contests, I want to learn competitive programming and get high rating".
I think they will practice hard — but quality of practicing hard is also very important. He would like to say for Codeforces user "Only just solving Codeforces problem is not very good — solve the main three (Topcoder, Atcoder and Codeforces + OI?) is better." (I don't know other judge but combination of these three is very good). I am risking that the Topcoder competitive programmer is decreasing and people might forget Topcoder, but it is still the best way of growing "thinking solution" skills, as he mentioned.
Also, he's saying that gray and green is very different, green and blue is very different, and also blue and yellow is very different. So the better way of practicing is different if rating is different.
I think the main point is these two (but also other things or extra corner are written so you can read from it). Did you get it?
It is too bad about topcoder. This blog finally motivated me to create a TC account. The problems were of course nice but I am not going to spend an hour learning how to submit solutions and deal with their host of UI problems. It makes me wonder how it got so popular in the first place.
Could you please give the spreadsheet of Topcoder div1 easy.
Please write blog on how to go from 2000 to 2200 now, thanks!
I'll post about the way from 1900 to 2200, within 2 weeks.
Coming Soon!
Did anyone go from 1500 or so to 2000 with this?
I read parts of this [book](https://en.wikipedia.org/wiki/Outliers_(book))
Based on his research the author concluded that to improve we need the right level of challenge. If its too easy you don't improve, if its too hard you give up. I think this current article is just about that principle put to use.
The wiki page talks more about his 10,000 hour rule for being the very best.
Does this work after division revolution?
I think some people who can solve problem faster could go to 2100 in this way because they can participate in Div2 contest.
Although this, participants whose rating is 2099 should get <=200-th place in div2 contests to gain rating (Top 4% of all participants), and there's much risk to drop 100+ rating in single contest for them. So, after division revolution, I think some people whose result is unstable might not reach 2000 in this way.
"In each contest, ABC-C and ARC-C is the same problem, and ABC-D and ARC-D is the same problem."
I think,here you wanted to write ABC-C == ARC-A & ABC-D == ARC-B .
Tutorial: From Rating 1900 to 2200
Finally, I wrote the extension version of this blog, from 1900 to 2200. I wrote it because I achieved 2200 recently.
Link : Here (PDF Version)
I hope this is useful for many people.
Let's discuss about this in this Codeforces blog comment.
Dude, thank you very much!!!
I See That You Started Problem Solving in Codeforces From 2017 And Now Your rate is 2212....How did you train to be in that rate in one year ?
I think he had some external training. Like regional websites and other sources, or great math background. Otherwise you can't just train hard and get to such a level in 1 year.
He started codeforces late. Actually he (and I) already started to compete in topcoder, 2.5 years ago.
deleted
Actually, my document has read by 170+ people. It was higher than estimated.
Again, thank you for reading my new document which is from 1900 to 2200!!!!!
Hope it is usable.
E869120
I have not understood the idea of Bingo. Can anyone explain please ?
select some random div2a problems and make a bingo like this one. The goal is to solve at least one row/column from it.
Finally — now it is only 1 rating to write a new blog, "To become a red: A way to practice competitive programming, from 1500 to 2400".
When I become a Grandmaster, I will write a blog in Codeforces.
In this blog, I want to share and explain all the way that I used, to become a red-ranked coder. For example, practice method, used online judges, problems which is very good at practice, and some other information. In the same way of my previous tutorial blog, I will explain in stages — because one of the best way of practice varies by color.
Again, I'm looking forward for sharing a blog. We hope you'll be looking forward to it.
Will you write a new blog or you will extend it?
Wish you become red soon.
when will you publish the blog ?
I think it's not so far. He caught flu few days ago and it's almost recovered. Also, note that we have some preparations for coming contest which we wrote some problems.
While your brother has the flu you have time to beat him in informatics.
square1001 had already beaten all participants and virtual participants (including his brother) in round 533 :)
Now I recovered flu and I started writing. Now 25% of blog has completed. I think that sharing will be April 29th.
it passed more than a week and still.....
Sorry for delay, but due to family reasons (sudden trip from 4/30 to 5/3 and some schedule), it was delayed. I am writing now, and the progress is 77%. (14 out of 18 pages) Hope I can publish by tomorrow :)
UPD 1: 95% Finished.
UPD 2: 100% Finished to write. There are grammer fixing / revising tasks that I will do tomorrow, so the publishing time of blog is going to be May 7th, 18:30 UTC+9. Sorry for long waiting.
UPD 3: Published! Link
Your method helped me, anyway. Don't rush)
15 point to add from 2400 to 2600 ( ဖ‿ဖ)人(စ‿စ )
And how about practicing for international olimpiads?
Hey, this blog seems very old. I can solve 2 problems of div2 but I am not able to get a rating above 1250. And the distribution of question according to divisions have been changed a lot. Can someone give a link to any latest blog?
You need to solve A and B under 10 minutes.
I know it's a bit late, but how can i filter out div2 A problems? Thanks!
It works :), solving only D1B. Thanx a lot!!
Solving TopCoder Problems is a real mess looking at their interface now.
Now This is very difficult(I think impossible) to gain 1200+ rating only solving 1 div2 problem in codeforces. Competition is so hard now.
then solve 2 problems
thanks for this..
Cool thing but I don't agree with 1000-1250 thing in Codeforces. One Div2 problem isn't enough. Everytime I solved one problem only my rating went down. To get to pupil you need to solve at least 2 problems quickly.
cuz this way is a little outdated
yes, right brother, min 2 problem required
My current codeforces score is 878. I want to see how much I can improve after training for one month, and I will leave a comment after one month.
bonus tip : (I wish i did this when i was a newbie) Participate in every contest and try to code till C. If you were unable to code till C(or last problem you solved in contest + 2) then code them after the contest by seeing the editorials or Youtube Video solutions. After a month or two you'll be full of confidence and would have solved a bunch of good problems.
What if you are unable to solve any problem even after seeing the editorials: Just leave it. Come to that problem after a week or two and repeat the same procedure if you still can't solve it.
Also don't jump to D until and unless you are feeling comfortable enough till C.
do you still recommend topcoder?