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.
- 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.
- 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.
- 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.
|Codeforces Div2 C||50%||o||50%||1500-1800|
|TopCoder Div1 Easy||o||x||o||1500-2000|
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.
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.