When submitting a solution in C++, please select either C++14 (GCC 6-32) or C++17 (GCC 7-32) as your compiler. ×

-is-this-fft-'s blog

By -is-this-fft-, history, 2 years ago, In English

I generally don't like to give much advice on "how to practice", but recently I have been thinking a lot about this and I realized that there is something that I believe affects a lot of people (though it is admittedly hard to tell) that barely gets talked about: self-deception.

Self-deception is a devious thing. It can be very hard to detect, yet can be fatal to improvement.

This blog is mainly directed to greys, greens and cyans that can't get out of these categories. Most examples are given with that in mind. That being said, I believe others have something to think about as well.

This is my first blog on such "psychological issues" and I don't know if I'll ever make another one. It's certainly a difficult topic to write about because for most of the blog, the message is "your practice is not as good as you think it is" or even "you aren't as good as you think you are" which can of course be a hard thing to hear. Thus, I have to somehow be very gentle while getting the point across, and I'm not sure how well I can even do either of these things individually. I also want to stress that nothing in this blog applies to everyone and nothing in this blog applies to everything you do.

Read this blog carefully. More than once I have explained these ideas and people just walk away with what they wanted to hear about "how to practice". I don't want to see this again.

I want to thank poomas, nor, SlavicG and OmniMan for reviewing this blog.

My sad story

To start, I'll give a personal story as to not seem like I'm talking from a high horse. Self-deception can affect anyone. Let me tell you something about my practice history. Somewhere in late 2019 and early 2020 I started to really like doing virtual contests. I enjoyed the process of doing them and started doing them every day, usually in the morning. For a while it was very fruitful. You can see the linear increase in my rating between January and August of 2020. I also upsolved, of course, but the rise in rating was in no small part due to these virtuals.

After a while, something happened though. For whatever random reason, I became slightly less interested in CP stuff, but I still did these daily virtual contests. However, something changed: I started to treat the virtual contests as a chore and got lazy. It is an exaggeration, but sometimes I felt like I slogged through them — just kinda did them, with overall less interest in solving the very hard problems. I still did the virtual contests like before and from the outside, it may seem as though nothing had changed. But in the inside, I no longer made a so serious effort to study and understand the problems so deeply.

What are the takeaways from this story?

  • It is easy to lie to yourself about practicing and spend time without actually doing meaningful practice.
  • From the outside it is impossible to tell the difference: no one can look at your practice and tell you for sure that you are deceiving yourself.

The second point is why it is fruitless to write blogs of the type "why am I not improving". No one can see inside you.


The point

According to my latest hunch, self-deception is the single biggest cause of not improving. I want to boldly put forward three hypotheses:

  • The best practice method is any reasonable method that doesn't let you deceive yourself.
  • If you are sufficiently motivated, almost anything satisfies the criterion above.
  • If you are not motivated, then almost nothing satisfies the criterion above.

By "motivation", I have a specific meaning in mind. The only motivation that matters here is a deep interest in the problems themselves. For a lot of people the motivation is that if they do well, they have a better chance of getting a job (I don't know if it is true or not, but there are a lot of people that do CP for this reason). A relatively small number of people even get a stipend or similar for CP. That kind of motivation can serve as a kind of secondary motivation in the sense that it gives you a reason to do CP instead of something else, but it's not enough. If you just watched a video from Steve Jobs or Elon Musk with a bunch of genericisms about success or read some motivational poster and got some kind of inspiration — I don't think that will get you very far. Interest in the problems is what matters here.

Are editorials evil?

I want to discuss certain cases where I suspect something very similar is happening. A popular method of practice is the following:

Pick a problem with difficulty rating $$$f(\text{your rating})$$$ and start solving it. If you haven't solved it after $$$n$$$ minutes (or $$$n$$$ minutes with no ideas), read the editorial.

In principle, I think that is a reasonable way to train. Here's what I think will really happen with a lot of people.

Pick a problem with difficulty rating $$$f(\text{your rating})$$$. Pretend to solve it for $$$n$$$ minutes, then read the editorial.

A quick note about terminology: at least in this blog, "solve" means "come up with the solution (and possibly, implement it)", not "implement the solution". I believe most users will use the terms this way, but I have seen newbies take it the other way and get some wrong ideas about suggestions.

Here, "pretend" can have a variety of meanings. Mostly it means a few half-assed attempts at solving the problem, maybe even trying a few common approaches but never fully devoting yourself to the problem because soon, you will see the editorial anyway. I know this happens, I have seen it happen to people and it has even happened to me.

Let me make a radical suggestion. Forget editorials. Start solving problems with no intention to ever read the editorial. Stop asking "how many minutes" and start asking "should I read the editorial at all?": not "when" but "if". I learned much of my early competitive programming on the USACO training pages. Even though it is quite dated now, I can still recommend that website. I attribute my pretty much immediate blue rating and some other early success to that site. There, you have no option of reading the editorial and that forces you to solve the problem until the end. Yes, a couple of times I searched for a solution, but only as an emergency. Do not make it a regular thing.

When this has been suggested in Codeforces comments, the most common reply is along the lines of

But if I don't read editorials, how will I learn new techniques?

Here's a list of techniques you need to know to get out of grey: DFS, binary search and ideas taught in middle school math. I actually think that list is exaggerated and it is possible to remove two or three things from this list, but let it be for the moment. I suspect that you might be seeing some statements in editorials that kind of look like techniques you're supposed to learn.

An example from a recent contest: the solution to 1617C - Paprika and Permutation mentions this fact: $$$x \, \mathrm{mod} \, y < \frac{x}{2}$$$ or $$$x \, \mathrm{mod} \, y = x$$$.

However, I'll say something different. These aren't techniques you're supposed to learn. You are actually meant to be able to come up with these during the contest. If it seems impossible for you to do, then it might be because you are depriving yourself from the part of practice that teaches you to think. If you go deep into every problem, you might see yourself being able to come up with that stuff faster and faster.

Yes, some of the facts I mentioned have appeared in several problems, so if such ideas come up again you're able to solve faster. But if you come up with them yourself when you need them the first time, you will know them the next time anyway. And the probability of retaining a fact is far greater if you come up with it yourself.

Update 06.01.22. Based on the comments I want to clarify this a bit. No, I'm not saying that this is the only correct way to practice. And I don't claim that editorials are actually evil or that you're not meant to actually read them — they are in fact made to be read. The title and content of this section is provocative by design, but the suggestion is serious. Try it, try it more than just once. You may discover that coming up with ideas is far more possible than you perhaps think.

Biased selection of problems

This is the second big thing.

Suppose you have a list of problems. For example, you went to the Codeforces problemset page and filtered it to show problems that have difficulty rating $$$f(\text{your rating})$$$ and/or problems that have tags in some topic you want to improve in. What will you solve?

Here's what often happens. You pick some problems and start working on them. The ones that are easier to you you will solve. The ones that you don't immediately solve you just kind of... leave be. Or maybe you used some kind of problem recommender and rerolled it multiple times, making up dubious excuses to justify skipping the problem, until you reached a problem that was kind of easy for you.

Some of you are wondering why you are still green after solving 100 problems with difficulty, let's say, 1600. But can you honestly say that this is a random sample of 100 problems with this difficulty? Or are these 100 problems in fact heavily biased towards the things you already know? Or does it mostly contain problems that are actually way easier than 1600 but have this rating because of some quirk in the difficulty rating system (for example, I don't trust the ratings of hard problems from Div. 2 and Div. 3 only contests)? Hard to tell, but in many cases it's hard to believe that they are uniformly distributed.

What's the solution here? Remember, the best practice method is any reasonable method that doesn't let you deceive yourself. USACO training solved this problem like 25 years ago (I'm guessing based on the appearance of the website): you can only see a small number of problems at a time. You HAVE to solve every problem to advance. There used to be another site. A2OJ ladders, the ones that were based on the position in the contest (like "Div.1 D") used to only show one problem. Sadly, they don't seem to do it any more. This is the feature that made A2OJ great, not that they had a list of problems to solve. Keep this in mind if someone suggests A2OJ ladders to you.


In a way these two ideas relate to Goodhart's law. How many problems you have solved is an ok measure for how much effort you have put in, but if it becomes your goal, then you are by human nature likely to solve a lot of problems in the easiest way possible which of course defeats the purpose of practicing.

These are the two main things I wanted to talk about. There are more examples of self-deception. In order to not dilute the blog post with too many other points, I decided to post more examples in the comments, look for them below. These are a bit more controversial, so your mileage may vary.

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

| Write comment?
»
2 years ago, # |
  Vote: I like it +337 Vote: I do not like it

Attributing your failure to irrelevant things

When people fail to improve, they naturally start searching for reasons. Unfortunately, a lot of the reasons are wrong.

A common example is thinking that you need to do more: "I practice every day for 5 hours and have solved 1000 problems, but I am still grey. Therefore, I must practice every day for 8 hours and solve 2000 problems!". No, stop. This should be a sign that you're doing something wrong. Yet I've seen grey people who recommend other grey people to practice 8 hours a day. Probably it's not a very common thing, but I still wanted to point it out.

This is tangential, but I wanted to find a way to say this: please don't practice for 8 hours a day. That's crazy. 8 hours is a normal workday, so essentially you're doing competitive programming full-time. Do you really think the average person who is purple, yellow or red here practices this crazy amount? I think it is fine to practice this much if you are really, really serious about competitive programming. But as a grey, you shouldn't be really, really serious about competitive programming — you don't even really know what competitive programming is. Treat competitive programming as a casual or semi-serious hobby until you reach a high-ish rating like purple or yellow. Then you are able to make an informed decision about whether you want to be really, really serious about competitive programming.

Another very common thing is thinking that you need to know more algorithms. I don't know if it was a joke, but some greys have suggested to learn FFT. There is a common meme that cyans are better at implementing HLD than reds. I outlined the set of algorithms you need to know above. Of course it's fine to learn algorithms if you simply think they are interesting, but don't think that not knowing them is holding you back.

Finally I have heard ideas that high-rated people are high-rated because they have some kind of personal trainer/coach/tutor or that they have attended a lot of training camps. And grey people can't get out because they can't afford it. That's not at all true. For most people I've talked to, if they even had a coach, it has usually been only an IOI or ICPC team leader who buys airline tickets, represents you in appeals, that sort of thing. Having a dedicated coach who personally works with you is a really rare thing, 95% of work comes from the contestants themselves. Yes, such personal trainers exist in sports like athletics or chess, but competitive programming is not even close to that level of competitiveness (maybe, yet). Training camps like Petrozavodsk are a thing, yes. But these are mainly useful for people who are already at a high level. And I think their main benefit is taking time off with your team to focus on competitive programming, not that these camps teach some hyper-exclusive stuff that you can't afford.

  • »
    »
    2 years ago, # ^ |
      Vote: I like it +25 Vote: I do not like it

    I've seriously read the last sentence as:

    "note that these camps teach some hyper-exclusive stuff that you can't afford."

    Damn what skimming do! LOL

  • »
    »
    2 years ago, # ^ |
      Vote: I like it +39 Vote: I do not like it

    I do believe that some people simply benefit from practice less than others. I typically don't practice that much (most of my solves come from actual contests), but this summer I set up a mild practice routine, just to try it. It didn't help much, at least not immediately. So the two possible conclusions are 1) some people don't benefit as much from practice because their bottleneck lies somewhere else (e.g. knowledge) or 2) the benefits of practice are quite delayed. I think the true answer lies somewhere in between.

    Don't get me wrong -- I do think practice helps. It's just more effective for some people than others. If you spend lots of time thinking about math and CS problems outside of competitive programming, then perhaps an extra hour of practice a day has less marginal effect than it does for someone else.

  • »
    »
    21 month(s) ago, # ^ |
      Vote: I like it -10 Vote: I do not like it

    I agree.

»
2 years ago, # |
  Vote: I like it +287 Vote: I do not like it

Mental gymnastics to justify low rating

In a way, I think Codeforces rating is actually a pretty good defense against self-deception (in case you are overestimating your skill). It is directly calculated from your actual performances in actual contests. Of course there are flaws, quirks and funny cases where the rating doesn't do what we'd want it to, but all in all I'd say Codeforces rating does what it's supposed to pretty well. However, for some reason our brains tend to ignore such largely objective data if we disagree with it, and start to find rationalizations. There are many people who believe that their rating is much lower than their "actual skill", whatever that may be.

This one is very tricky, because there indeed are people whose rating is clearly not indicative of their skill. For example there are people who have not participated for a long time, people who participate only rarely, people whose current rating is significantly lower than their average, and so on. For example, no one would say that mustrumr (4-time IOI gold medalist) is really blue. And we are quick to point to these cases. But these exceptions reaffirm the rule, and I'm confident that most people who believe their rating is lower than their skill are wrong, and the reasons they think that their rating is so low are flimsy, made up rationalizations.

Typical rationalizations arise from comparing your best case to others' average case. For example, maybe you did really well on a few contests and you don't notice how much you're cherry picking. Similarly, perhaps you are a cyan who was blue for a week or two. And you attribute the loss of your blue color to "bad luck" while thinking of yourself as "basically blue". Alternatively, you might believe you have a much higher true rating because you are thinking of your accomplishments that you're not even comparing with others. For example, you might think that although you are only purple, you regularly upsolve Div.1 D-s relatively quickly (which even grandmasters don't solve consistently during the contest), therefore you think that in a slightly longer contest you would be red. But in this case, you don't even consider how well an average purple would do.

A variant of this thinking is that since you're preparing for a slightly different kind of contest, your Codeforces rating isn't indicative. Like the others, this case is tricky because it is partially true. For example, I'm ready to believe that a purple or yellow who has specialized in OI-style contests might be able to consistently get golds in IOIs. However there's a limit to this stuff. If you're grey or green, then I seriously doubt you have a good chance at OI-style problems, because every hard problem contains a lot of easy problems and if you can't even solve these easy problems in two hours, then you're not going to be able to piece them together to a hard solution in five hours.

  • »
    »
    2 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Thank you for your blog. How about thinking that the current rating is below your capabilities (potential). For example, I can turn purple, yellow, etc. if I practice. Or here, too, there is a deception, everyone has a limit of which he cannot pass.

    • »
      »
      »
      2 years ago, # ^ |
        Vote: I like it -17 Vote: I do not like it

      I mean, technically everyone's current rating is below their potential, but if you think you should/could be a better rank than you are right now, just go and prove it. The self deception comes in ignoring that youre in your current rank for a reason and not because mike mirzayanov doesnt like you.

    • »
      »
      »
      2 years ago, # ^ |
        Vote: I like it +16 Vote: I do not like it

      Ok so i talked to people and turns out my other comment didnt pass the impression i wanted (also i completely misunderstood your comment), so here is my second attempt:

      I dont think believing you can achieve a better rank with practice is self deception, even more because its true 99% of the time. The self deception is ignoring the reasons that put you at your current rank, which could be things like being bad at certain types of problems, being nervous at contests, not remembering and reusing ideas from problems you already did, not giving your all in contests, not dominating standard techniques like dp and binary search, trying to model simple problems for techniques that are too complicated, not sleeping well, etc...

      The reason i say this is because i believe this "limit" you speak of is often not because of a lack of practice (dont get me wrong, a lot of times it is), but for not understanding/trying to understand what really makes them the rank they are or not trying to improving on that.

      Personal story
  • »
    »
    2 years ago, # ^ |
      Vote: I like it +38 Vote: I do not like it

    What do you feel about the opposite: when you believe that your rating is too high and thus never do a contest again.

»
2 years ago, # |
  Vote: I like it +32 Vote: I do not like it

I have had a similar experience.

During the month of May-July I started giving daily mashups. These mashups were good for pretending. They had at least 3-4 problems of rating 800-1200. I quickly solved these contest and then thought to myself that since I had already done four problems I have done too much. If I came across a difficult problem I would ignore it. My rating increased during this period but it was very random.(Proof -> the 306 800 rated problems I have solved).

Then during July ,I reevaluated my strategy. I decided that instead of doing random easy problems and boosting my problem solved count, I would do problems I found interesting. I started learning stuff that interested me and earlier I would have thought of as impossible (Digit Dp). I also started solving problems that were comparatively more difficult. This strategy has been better for me .

»
2 years ago, # |
Rev. 2   Vote: I like it +31 Vote: I do not like it

[DELETED]

»
2 years ago, # |
  Vote: I like it +244 Vote: I do not like it

Well, the title says "why you're still grey", but it is worth noting that the explanation basically covers most of "why you're still at level X" for maybe all $$$X < 2600$$$ or even higher. I believe that I speak from experience.

  • »
    »
    2 years ago, # ^ |
      Vote: I like it +108 Vote: I do not like it

    That $$$X$$$ can definitely be higher from my experience. This is probably a thing across all levels.

  • »
    »
    2 years ago, # ^ |
    Rev. 2   Vote: I like it 0 Vote: I do not like it

    I don't agree much, at least you need to update the list of algorithms/techniques you should know, if you reach GM with using only those algorithms mentioned in the blog, then you won't have a stable rating, or you're cheating, or you know many algorithms that you don't know you know (or you came up with by yourself), can't imagine any other possibilities.

    I think at some point you need to really learn new algorithms/techniques to reach GM (which I'm too busy to focus on, and I'm not improving much because I neither practice much nor learn new algorithms frequent enough)

    Overall it's very useful blog for all the ratings, beside some small things that should be changed for higher ratings (well, people with higher rating can probably imagine how the blog would look like if written for their rating).

  • »
    »
    2 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    I think this explanation applies not only for CF rating, but for most stuff that someone may want to succeed at. In general, people tend to avoid their weaknesses by massaging their egos while doing the same tasks, which can be translated to their comfort zone.

»
2 years ago, # |
  Vote: I like it +105 Vote: I do not like it

I want to speak against this demonisation of "reading the editorial too early". I mean, certainly make some effort to try solve the problem alone, and definitely dont just look at the count of problems you solve. Not only implementing the problem is important but after you read the solution think to yourself: "Why didn’t I think of this idea alone?" and "Do I see myself solving a similar problem about this topic in the future? — If not, why not? What insight is not intuitive to me?" and try to digest the problem this way. IMO being honest to yourself about how much you learnt with the problem is more important.

  • »
    »
    2 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    I also agree with this point. And in my opinion, practicing problems beyond my current rating is much more helpful than doing problems similar to my level.

    So it could be quite difficult for me to come up with the solution by myself. I will immediately refer to editorial after some time of thinking (say 30 minutes). The point is to learn new things, especially for people with rating < 2100.

    I decide to practice random topics and more "thinking-heavy" problems after I reach a higher level, maybe at that time I will spend more time thinking before referring to the editorial.

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

    I agree. I have a found a key step in getting comfortable with problems that I don't see people mention much is, like you said, asking yourself "why didn't I think of this?" The goal of reading the editorial shouldn't be to understand the solution, but rather how to get to the solution.

»
2 years ago, # |
  Vote: I like it -67 Vote: I do not like it

-is-this-fft- Thanks for the blog can you list out the topics that I need to know to turn blue on codeforces

»
2 years ago, # |
  Vote: I like it +38 Vote: I do not like it

I'm still only newbie, but I can confirm the thing about editorials. When I started doing CP, whenever I wasn't able to solve the problem within 5 minutes, I jumped straight to editorial without even trying a little. Sometimes I didn't even read the whole statement and told my self — "There's no way that I can solve this". That's how I solved lot of problems and learned nothing.

Recently, I've started solving our Slovak national OI and other long-term national contests. Usually, duration of these contests is ~1 month, so you have to be really patient and do your best to solve some problems. For example it took me something around 3 weeks and 60 tries to solve one problem. But I've learned a lot from that.

Since I started doing this, I'm noticing improvement and hope that it'll be visible on my graph soon:)

»
2 years ago, # |
  Vote: I like it +80 Vote: I do not like it

»
2 years ago, # |
Rev. 4   Vote: I like it +37 Vote: I do not like it

As soon as I saw this blog, I knew you were going to talk about "pretending" to solve the problems because it was the exact thing I was doing earlier. I started solving problems in Feb 2021, and I made it a habit to wake up and solve 2 to 3 problems every day. As time passed, it did become a chore for me and I was solving only for the sake of solving, not to learn from those problems.

I am glad that I figured it out, and I broke my 163 days streak knowingly, in order to take a break of around 15 days. I took a break, and made my mind that I won't really care about actually solving the problems at all, instead I will try to gain whatever new concepts I get by trying those problems.

And I think I can see the improvement now. Thanks a lot for sharing it!

»
2 years ago, # |
  Vote: I like it -36 Vote: I do not like it

I think this is the message I was waiting for that just said, "the best way to learn isn't reading edi, its virtualling" :D

»
2 years ago, # |
Rev. 2   Vote: I like it +53 Vote: I do not like it

-is-this-fft- drops mic..

I am just a newbie but ill just give my two cents.

Great Post. Very well articulated. I'd go so far to say that this post gives a closure to all this "how to improve my ratings" posts.

This post reminded me of this book — "Flow" by Mihaly Csikszentmihalyi. I found it to be a scientific book based just on observations and not a self-help book by any mean. Its a slow read but has a lot of gems on "how to break the plateau effect" and "how to stay interested on a topic". It also contains some historic tricks from famous people (chess players, athletes, artists etc) on how they stay in the zone.

For instance, check out this simple graph => 53bd6011eab8eaec25617711

Adding the link just in case => https://imgur.com/uUERAct.

If you are in A1 or A4, you're doing fine. If you're in A3 or A2, then you may have to go along the x-axis or y-axis(meaning improve your skills or make it challenging). Random googling led me to this blog.

Besides the obvious (hard work, consistent), maybe success in CP (getting to LGM for instance) could just be simple. People started early in their life as a kid when distractions were less and a much curious mind. So there is no need for any extra effort to stay motivated. For others and for people like me (late to CP), it could just be that we have to dig up that childhood curiosity and apply it to programming and solving problems. If you're motivated enough, then there would be no need for you to push hard and everything is on auto-pilot (Einstein's relativity kicks in).

However, self-introspection can be tricky. But maybe it is just as simple as looking at that graph above, find out where we are and do something about it.

Thanks for the post..

P.S: Not a single soul upvoted. So thanks for that. Please don't downvote though. :)

»
2 years ago, # |
  Vote: I like it +181 Vote: I do not like it

Very nice blog

  • »
    »
    2 years ago, # ^ |
      Vote: I like it +348 Vote: I do not like it

    Um_nik hopefully after reading this you can get out of cyan!

    All the best to you the entire community is cheering you on.

»
2 years ago, # |
  Vote: I like it -10 Vote: I do not like it

wow! this is too accurate. great blog that definitely will make difference.

»
2 years ago, # |
  Vote: I like it +30 Vote: I do not like it

Forget editorials. Start solving problems with no intention to ever read the editorial.

This was my strategy over the past summer, but I've since abandoned it because, at least for me, it wasn't very efficient and I saw no noticeable improvement over several months of training this way. (Had high hopes of acing USACO gold but ended up failing miserably.) Granted, I put in lots of effort and focus, possibly spending days on a problem trying to come up with a solution and implementing it without any hints from the editorial. Although very gratifying when I actually solve the problem at the end, I now realize that all that thinking ended up taking up time that could've been spent learning something new or gaining some insight from the editorial. Sure, if you're doing CP purely for the enjoyment and satisfaction of solving problems, I think that not looking at the editorial is a great way to go. But if you want to improve in the most efficient way possible, I think reading (many) editorials and doing (many) problems is a great way of getting there. (I've just begun to implement this strategy. Wish me luck!)

Also, in my opinion, reading editorials can give you new ways of looking at problems in general that you would've never thought of yourself.

  • »
    »
    2 years ago, # ^ |
      Vote: I like it +19 Vote: I do not like it

    If you're often spending days, maybe you should practice easier problems.

    • »
      »
      »
      2 years ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Yeah, I realized doing problems way above my level was another reason why my summer practice kind of failed.

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

Let me make a radical suggestion. Forget editorials. Start solving problems with no intention to ever read the editorial. Stop asking "how many minutes" and start asking "should I read the editorial at all?": not "when" but "if". I learned much of my early competitive programming on the USACO training pages. Even though it is quite dated now, I can still recommend that website. I attribute my pretty much immediate blue rating and some other early success to that site. There, you have no option of reading the editorial and that forces you to solve the problem until the end. Yes, a couple of times I searched for a solution, but only as an emergency. Do not make it a regular thing.

If you have internalized this paragraph you have acquired 90% of the benefit of the blog.

After all these years USACO training pages remains the best.

  • »
    »
    2 years ago, # ^ |
      Vote: I like it +15 Vote: I do not like it

    I recommend the 1st chapter of training gate to beginners, but I still think the rest is useless. I've completed all the main pages years ago looking at almost no solutions and am still hard-stuck purple :(.

    • »
      »
      »
      2 years ago, # ^ |
        Vote: I like it -7 Vote: I do not like it

      The first 5 chapters are good and useful, last chapter has more advanced stuff which might not be relevant until later. But the first 5 are definitely good.

»
2 years ago, # |
Rev. 3   Vote: I like it -73 Vote: I do not like it

stupid peepz dislike this comment asap :)

  • »
    »
    2 years ago, # ^ |
      Vote: I like it +23 Vote: I do not like it

    This is exactly what the blog was going against lmao

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

    .

  • »
    »
    2 years ago, # ^ |
      Vote: I like it +9 Vote: I do not like it

    I think that stuff like "solve this problem in at most x minutes" is very inflexible/limiting, because there are easy problems that require half of that time and hard problems that may take you a lot more time, despite of their equal difficulty ratings. A much better approach is not to limit yourself to a time limit, just consult the editorial when you run out of promising ideas (which happens pretty quickly, at least for ratings <= 2000).

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

The one thing about A2OJLadders are they really old. The problems in the 1500 level corelate to 1200 (or even 1100) nowadays

»
2 years ago, # |
  Vote: I like it 0 Vote: I do not like it

Wow, this blog reminds me of the very early period when I started doing virtual contests from round 1.

At that time, I seldom spent time upsolving, and moved to the next round even only with div2 AB solved. I just enjoyed the happiness of getting problems accepted during contests too much but ignored that, learning is in fact more important.

After realizing this, I started upsolving, reading tutorials carefully, learning algorithms and data structure systematically, taking notes and forcing myself to deal with harder problems. There is still a long way waiting for me, and hope that I could always keep this in mind.

»
2 years ago, # |
  Vote: I like it -26 Vote: I do not like it

lmao you're lying and I'm doing a very shitty joke

»
2 years ago, # |
Rev. 2   Vote: I like it -25 Vote: I do not like it

I feel like this is overwritten. All this can be summarised in "you have to keep pushing your comfort zone and enjoy doing it"

  • »
    »
    2 years ago, # ^ |
      Vote: I like it +8 Vote: I do not like it

    What?

  • »
    »
    2 years ago, # ^ |
      Vote: I like it +62 Vote: I do not like it

    It is definitely not, your "short" summary is generic bullshit people say every day without even thinking about it much, and you pretty much missed the whole point of the blog, despite author telling it in the name of a blog: self-deception. This blog is not about "pushing comfort zone", it's about being aware that you actually do it, and not bamboozling yourself. This article really makes you reflect on your practice routine and general attitude to any hobby, and personally I think this is the right amount of text that is small enough to not be "overwhelming to read" and big enough to actually force you to think about it without closing blog and forgetting about it in 5 minutes.

    • »
      »
      »
      2 years ago, # ^ |
        Vote: I like it -55 Vote: I do not like it

      lmao dude. Things are not that complicated in life. But if u want to convince yourself that you are that sophisticated, you do you

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

        i don't know how any of this relates to my comment, but okay.

  • »
    »
    2 years ago, # ^ |
      Vote: I like it +79 Vote: I do not like it

    I agree that this is overwritten. All this can be summarized in "" (the empty string) because few people will actually change.

»
2 years ago, # |
  Vote: I like it +1 Vote: I do not like it

Don't accept the blog as the ground truth, I got all my rating thanks to editorials

»
2 years ago, # |
Rev. 3   Vote: I like it +39 Vote: I do not like it
Meme
»
2 years ago, # |
  Vote: I like it +22 Vote: I do not like it

Very good blog. I think you can add these statements from me, what do you think of them?

  • you need to solve problems to get better
  • you may use editorials
  • if you used the editorial, the problem becomes spoiled and can't be counted as solved
  • »
    »
    2 years ago, # ^ |
      Vote: I like it +22 Vote: I do not like it

    I feel like point 3 can be changed to:

    • if you used the editorial, the problem can’t be counted as solved but you must learn at least one thing from the solution.

    Saying it was spoiled makes it seem like the entire learning process was a waste.

  • »
    »
    2 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    I agree.

    If you solve without editorial, you win. If you solve with editorial, you lose. If you can't get what editorial says, you are dead.

»
2 years ago, # |
  Vote: I like it +126 Vote: I do not like it

Are editorials evil?

No. It's at your fault that you let editorials affect your training negatively. I still think reading editorials is helpful because of these reasons:

  • Some well-written editorials provide hints (huge thanks to the authors who did this, you guys are awesome!). These are super useful because you can still solve a part of the original problem.
  • You've come very close to the solution (a few times we might deceive ourselves but I believe we're actually there more often than not) and there is one last knot to untie.
  • Poorly-written editorials are sometimes a blessing in disguise (surprised?). You still have to think a lot after reading them. There is also the implementation part, which is something you can improve after reading editorials. One example in my mind is 1083C - Max Mex. I had absolutely no idea how to implement the idea mentioned in the editorial and had to refer to other people's codes.
  • Your time is limited. If you solve a problem after spending too much time on it, your ROI (Return on Investment) is pretty low. Furthermore, it doesn't gain you much value since you only have at most 1.5-2 hours for a problem during contests.

To sum it up, editorials are provided to support you but how to utilize them in a right way differs for every single one of us. Just don't abuse them to increase your artificial number of solved problems and you're all good.

»
2 years ago, # |
  Vote: I like it +8 Vote: I do not like it

Thanks for your blog. I am a newbie now. I will train like this in the coming days. 1. Forget editorials. 2. I only can start the next one after completing one question. 3. Have fun in the problem. 4. Don’t stipulate how many questions to do every day. I will share my feelings in two months.

»
2 years ago, # |
  Vote: I like it 0 Vote: I do not like it

Many Russians start their journey with acmp.ru, acm.timus.ru . Archive of tasks where 99% of tasks have no editorials. Think about it.

  • »
    »
    2 years ago, # ^ |
      Vote: I like it +5 Vote: I do not like it

    ok but where do chinese start?

  • »
    »
    2 years ago, # ^ |
      Vote: I like it +39 Vote: I do not like it

    This requires having a coach, which makes everything(including virtual participation) easier.

»
2 years ago, # |
  Vote: I like it 0 Vote: I do not like it

Beautiful blog. So many people are interested with the idea of progress rather than progress itself. ie, watching videos, climbing ladders while it's easy to climb, copying famous coders' implementations for obscure contests... I actually got to orange using only "DFS, binary search and ideas taught in middle school math", which is enough for ~60% of the ABCDE's I have come across, and certainly 95% of ABCD. [naturally I'm familiar with DP and basic number theory like what modulo does]

Never used so much as a segment tree. I also have a strict no editorial until solve policy.

I feel like if you're brain isn't in pain, and you don't make the BREAKTHROUGH yourself, you're learning to imitate not to create.

Given I'm back to blue, you might be disinclined to believe me, but it is what it is.

»
2 years ago, # |
  Vote: I like it +5 Vote: I do not like it

Can't agree more, now I know what exact blog to refer to when people ask for advice. Thank you so much!

»
2 years ago, # |
Rev. 3   Vote: I like it +56 Vote: I do not like it

I don't think the editorial is evil. Reading editorials helped me substantially about gaining new knowledge or thinking direction. But on the other hand, I also agree with the article's claim that "people have a cognitive bias that overestimate their degree of thought about the topic and read the editorial".

Ideally, editorials should not be opened per fixed-time basis. It should be opened per your decision whether you want to continue thinking or not. Think editorial as a tool that provides a "fixed amount of insight". If you think your attempt will discover good insights or going to solve the problem, there is no reason to open the editorial. On the other hand, if your action items of thinking direction is empty, is bored, will think you will gonna forget the problem instead of thinking it, then reading editorial will give you more benefits. This differs from the fixed-time based decision, since it focuses on what you will do rather than what you have done.

This also brings a natural way to determine the difficulty of problems for you. If you end up reading too many editorials, you are probably solving too hard problems. If you end up thinking too much: then the opposite direction is true.

Btw, I don't know why people are hailing USACO Training as relevant training material. It is outdated in like 10 years ago. And they are just full of braindead implementation. Don't do it.

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

Self-deception can happen during contest as well.For example sometimes one has solved X problems in a contest which they generally solve in every contests no matter what, the problem appears during X+1 th where sometimes contestants seem to buy time and feel nice that they are trying but they are actually not.That's self-deception and it can happen subconsciously if one makes it a habit

  • »
    »
    2 years ago, # ^ |
      Vote: I like it +1 Vote: I do not like it

    To be honest, sometimes I felt that during the contest:))

»
2 years ago, # |
  Vote: I like it +6 Vote: I do not like it
List of topics:
»
2 years ago, # |
  Vote: I like it +11 Vote: I do not like it

Brilliant blog, love it. I'd like to mention a few more things, from my limited experience:

  1. If it doesn't feel emphasized enough already, keep thinking deep as if there were no editorial. That really is what's going to cause the most improvement. You may learn a few standard tricks after reading lots of editorials, but that will not go very far.

  2. If you do decide to finally read the editorial, don't read it fully at once. Read it slow. As soon as you see something you hadn't thought of in your attempts, close it and restart. Discover the rest of the solution yourself. If you can't, repeat this process.

  3. Implement and get AC. There's no way around this. No one cares how many problems you have "theoretically solved". You gotta get AC, and implement stuff yourself. Once you do get AC, learn from people better than you on how to implement the same in a short or cleaner manner.

  4. USACO training pages are a good example. I have never personally used them, but I have used SPOJ, and it kind of re-inforces the same idea, you don't really have an editorial, so you have got to keep grinding to get to the solution. I believe pretty much everyone < 1600-1700 should solve a few hundred problems from SPOJ, in the order of most solved to least solved.

»
2 years ago, # |
  Vote: I like it 0 Vote: I do not like it

I would also like to point out few more things I have experienced

  1. When we try to solve a problem and find its solution if problem is hard and our implementation is also a little bit complicated we just look at the editorial for a simpler solution and do not implement our solution which leads to decrease in finding the solution in actual contest and still not able to implement it.
  2. Sometimes we also leave a problem by just only reading it and seeing its difficulty we think that the problem requires some extraordinary stuff but it only requires some basic understanding of concepts and implementation.
»
16 months ago, # |
  Vote: I like it +3 Vote: I do not like it

I think you have explain excellently about Self-deception as well as improvement. Thank You for this blog.

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

so true... thanks.