As an experiment the Educational Codeforces Round 33 will be rated for Div. 2. ×

E869120's blog

By E869120, 4 months ago, In English,

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.)
I think making library is good because you can shorten the time that writing RMQ class, BIT class, 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.

Thank you for reading!

 
 
 
 
  • Vote: I like it  
  • +181
  • Vote: I do not like it  

»
4 months ago, # |
  Vote: I like it +22 Vote: I do not like it

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 :)

  • »
    »
    4 months ago, # ^ |
      Vote: I like it +6 Vote: I do not like it

    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.

»
4 months ago, # |
  Vote: I like it +88 Vote: I do not like it

There is another way around.

  1. Get to Div1.
  2. Solve Div1 E problem.
  3. profit.
  • »
    »
    4 months ago, # ^ |
      Vote: I like it -10 Vote: I do not like it

    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.

  • »
    »
    3 months ago, # ^ |
    Rev. 7   Vote: I like it +10 Vote: I do not like it

    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.

»
4 months ago, # |
  Vote: I like it +113 Vote: I do not like it

[Tutorial] A Way to get high contribution: From 0 to 100

Write 'bout bullshit.

»
4 months ago, # |
  Vote: I like it +45 Vote: I do not like it

Will there be a follow-up post on how to get from 2000 to 3000?

  • »
    »
    4 months ago, # ^ |
      Vote: I like it -18 Vote: I do not like it

    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.

»
4 months ago, # |
  Vote: I like it +6 Vote: I do not like it

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 :)

  • »
    »
    4 months ago, # ^ |
      Vote: I like it +7 Vote: I do not like it

    Answer to 1:

    • There are 4 problems in ABC. (ABC-A, ABC-B, ABC-C, ABC-D)
    • There are 4 problems in ARC. (ARC-C, ARC-D, ARC-E, ARC-F)
    • In ARC/ABC (like Div.1 + Div.2 contest in CF), ARC-C and ABC-C, ARC-D and ABC-D problem are the same.

    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:
    • The bingo rule is 5-in-a-row like this problem. Horizontally, diagonally and vertically are all OK
    • The bingo helps your motivation up. (For example, if you solve 5-in-a-row, you get point)
    • I made the bingo randomly in Codeforces Round #369-#424, so "Is it rated?" middle cell is only a coincidence. Red / Yellow / Green cell color is only a decoration.


    Answer to 3:
    • o means that the effectivity is high for concept-practice etc.
    • x means that the effectivity is low for concept-practice etc.
    • 50% means that the effectivity is medium for concept-practice etc.


    Sorry for my poor English.
    Thank you for reading my post.
»
4 months ago, # |
Rev. 2   Vote: I like it +152 Vote: I do not like it

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.

  • »
    »
    4 months ago, # ^ |
    Rev. 2   Vote: I like it +33 Vote: I do not like it

    "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)

  • »
    »
    3 months ago, # ^ |
      Vote: I like it +10 Vote: I do not like it

    "Legend rank is the beginning of true cultivation"

»
4 months ago, # |
  Vote: I like it +2 Vote: I do not like it

Has anyone else also tried this and it worked?

  • »
    »
    4 months ago, # ^ |
      Vote: I like it +61 Vote: I do not like it

    So you expect someone to increase rating from 1000 to 2000 within 26 hours.

    • »
      »
      »
      4 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      I meant if someone has tried this way before this blog came up and had good results.

  • »
    »
    4 months ago, # ^ |
      Vote: I like it -35 Vote: I do not like it

    Been doing the same thing for months now, not improving very well, I am just a specialist now(In real account).

»
3 months ago, # |
  Vote: I like it +16 Vote: I do not like it

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)
»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

This issue gives me the most trouble.

»
3 months ago, # |
  Vote: I like it +5 Vote: I do not like it

To make sure we all understand the core of the post. Hardly practicing means almost no practicing. Is that what you wanted to say?

  • »
    »
    3 months ago, # ^ |
    Rev. 2   Vote: I like it +5 Vote: I do not like it

    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?

    • »
      »
      »
      3 months ago, # ^ |
      Rev. 3   Vote: I like it +3 Vote: I do not like 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.

»
3 months ago, # |
  Vote: I like it +3 Vote: I do not like it

Could you please give the spreadsheet of Topcoder div1 easy.