Пожалуйста, прочтите новое правило об ограничении использования AI-инструментов. ×

Блог пользователя linkyless

Автор linkyless, история, 6 недель назад, По-английски

Hello Codeforces!

Lately, I’ve become deeply immersed in the world of competitive programming. For me, at least, this has meant a commitment to studying every aspect of it in depth, with the goal of “learning it the right way.” Like many others, I began with the basics—identifying which problems to tackle, figuring out how to practice effectively, and learning how to keep my motivation up during the inevitable struggles. I grappled with questions like whether or not to read editorials. But as I delved deeper, I found myself contemplating broader questions: How do we truly learn? And perhaps more importantly, how do we process and retain information when we’re trying to master something as intricate as competitive programming?

Like any curious person, I dove headfirst into this exploration, and I was surprised by the sheer volume of posts on this plataform that touch on this subject. There are masters who have ventured into the psychological depths, crafting entire articles that dissect how to learn effectively, tailored to different types of learners. These pieces are an invaluable resource, offering insights into how we can better approach our learning journeys.

However, there’s a glaring gap in some of these discussions—how to teach and how to explain—especially in a field as complex as competitive programming. And I believe this is an area that deserves attention, as it extends beyond the individual struggling to learn and touches on a broader issue.

Perhaps learning how to teach and explain isn’t something everyone needs to pursue. For most of us beginners, the primary concern is simply mastering the topic at hand. In the context of competitive programming, the idea of teaching or explaining concepts clearly seems distant and irrelevant—after all, why would a newbie like me worry about teaching when I’m still grappling with the basics? This post isn’t a tutorial; it’s reflective in nature, a way for me to explore and articulate my thoughts. I hope, through sharing this, to receive recommendations, insights, or even just opinions from those who’ve been through similar struggles.

The motivation for writing this post comes from my years spent in the traditional education system, where I encountered many teachers who, frankly, didn’t teach well. When I finally ventured into the unfamiliar territory of competitive programming, I was hit hard by a similar realization: many editorials, algorithms, and data structures were difficult to grasp—not because of what they were, but because of how they were explained.

Competitive programming is hard. We know that. But it’s not just the complexity of the problems; it’s also the way these problems are presented and explained. After spending a considerable amount of time trying to understand these concepts, I noticed that many explanations skipped over crucial parts—like developing an intuitive understanding or nurturing a love for the problem itself. This makes any CP youtuber explaining intuition feel unique (i.e.: Back To Back SWE, Decoding Intuition , Errichto , etc...) Often, editorials dive straight into the solution, which can be necessary, but what happens when the real value lies in loving the problem enough to truly understand its deeper meaning?

I know that criticizing an editorial as “incomprehensible” requires evidence, and I could easily list twenty links to explanations that left me confused and frustrated. But I trust I’m not alone in this experience; surely, there are more than just a handful of people who resonate with this perspective.

And don’t get me wrong—I don’t just passively read; I practice, a lot. Maybe not as much as I’d like, but enough to see steady progress and growth. Yet, despite all this practice, I still encounter the same issue.

Initially, I assumed my difficulties stemmed from my inexperience. I thought I didn’t understand certain editorials because I was a newbie. But now, even when tackling relatively simple problems, I find myself confused by explanations that seem to skip over important details. It feels as though these crucial steps are left out, possibly because many of the authors are experts who’ve been immersed in this field for years.

Before, I convinced myself that I was the problem for not understanding the editorials, especially those involving mathematical concepts I supposedly should have known beforehand. To bridge this gap, I began reading Concrete Mathematics, a wonderful book that delves deeper into the mathematical foundations relevant to competitive programming. However, even this book wasn’t without its challenges. There were times when I stumbled upon problems that the text described as “**trivial**”, yet I found them anything but. Despite being true to intuition, things like this happened. This only strengthened my resolve to explore these issues further.

![ ](image-1)

Then, I ask: Is the problem with how these topics are being taught? Is it that the full process of the solution isn’t shown due to laziness? Does it take too much time to pay attention to the explanation of a problem? Or is it us, the ones who don’t understand, who are truly “not understanding”? I hope it’s clear where I’m heading with this. However, I repeat the question better.

Where does the true challenge lie? Is it in the complexities of the subject matter, the way it’s taught and explained, or the gaps in our own understanding? That’s the question we need to explore.

I encourage anyone to try to learn how to explain a topic, because doing so will allow you to learn that topic. Teacher and student learn equally in that sense.

Thanks for reading!

  • Проголосовать: нравится
  • +60
  • Проголосовать: не нравится

»
6 недель назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

nice blog

»
6 недель назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

me estoy empezando a cuestionar mi propia vida, buen blog <3

»
6 недель назад, # |
  Проголосовать: нравится +33 Проголосовать: не нравится

I’ve thought about a similar question for a couple of years now: “is there such thing as irreducible complexity?”. Nobel laureate Richard Feynman is famous, among other things, for saying that “if you can't explain a theory in a simple way understandable to kids, then you didn't understand it well.” and he was an expert in the field of quantum mechanics which most people would agree offers some of the most difficult concepts to grasp among all STEM fields. Such quotes point at the idea that no topic, however difficult it may seem, is irreducibly complex: if you truly understand it’s essence you ought to be able to explain it to a child; then again I ask myself, “how would I explain PDEs to a child?”. Sure I might say something along the lines of “this is a mathematical instrument that allows us to model phenomena such as heat diffusion” but can I say that I have grasped the essence of the topic in such a statement? I feel that I had to cut out so much context to make it understandable by a child that it’s essence is gone, I would at least like to say that in a PDE we’re solving for a function but that a child already wouldn’t understand. Then again, I might simply not have understood PDEs well enough lol. My best theory is that it all comes down to prerequisites: if you have understood something fully you ought to be able to explain it to a theoretical child that has magically already learned all the necessary prerequisites. How does this apply to your post? I guess it’s not wrong to say that we novices are the problem if we don’t understand editorials but it’s also not wrong to say that the editorials are the problem: the point is that there is a gap between the prerequisites that the person who is writing the editorial assumes we have and the prerequisites we truly have, it’s a misfit, we’re not that editorial’s “ideal” reader. Then the solution is simply to find a lecturer who assumes exactly the level of prerequisites you really have, but I am stating the obvious.

  • »
    »
    6 недель назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    thanks for great insight as always

    • »
      »
      »
      6 недель назад, # ^ |
        Проголосовать: нравится +4 Проголосовать: не нравится

      Would you stop trolling on me and other nice people and get life? If you keep up this trolling behavior I’ll suicide miself

      • »
        »
        »
        »
        6 недель назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        I am great Tuna fan and I have respect for all average codeforces users .

        • »
          »
          »
          »
          »
          6 недель назад, # ^ |
          Rev. 2   Проголосовать: нравится +4 Проголосовать: не нравится

          I think you are smart person pretending to be stupid to troll me

          Evidence 1
          Evidence 2
  • »
    »
    6 недель назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    Thank you so much for your comment, TunaMayoSandwich. It got me thinking, and I’d like to pose a question: the idea that "if you truly understand a topic, you should be able to explain it to a five-year-old." Let’s play with this notion for a moment. Imagine you’re trying to explain a well-known, supposedly “simple” algorithm to someone who is already familiar with all the foundational concepts surrounding it. It’s an assumption, of course, and perhaps a bit of a stretch, but it raises an interesting point: is the real challenge here about intuition, or is it about knowledge? Now, let’s take this a step further. What if the five-year-old in question somehow understands all the necessary prerequisites, such as basic functions, when you’re trying to explain something more complex, like PDEs? Suppose this child grasps the fundamental concepts leading up to PDEs—maybe not all, but certainly enough to follow along. Yet, despite this understanding, the child still doesn’t quite get the concept. In that scenario, do we continue to hold onto the idea that the child is at fault for lacking intuition or perhaps having a lower IQ? Or is there something more at play here—something that goes beyond just the child’s cognitive abilities? When someone fails to understand an explanation, is it fair to automatically assume the problem lies with their ability to comprehend, or should we be questioning whether the explanation itself is truly accessible?

    I assume that there are no blacks or whites, but grayscale. And so I stand by your comment. Thank you!

    • »
      »
      »
      6 недель назад, # ^ |
      Rev. 2   Проголосовать: нравится +13 Проголосовать: не нравится

      Thank you for the nice blog and comment linkyless! I’m not a psychologist and I’ve only ever read one psychology paper, but that was about deliberate practice and not this stuff of intuition vs knowledge so I’m not an expert by any means and what I say should be taken with a grain of salt. I’ll try to give an orderly answer to the points you raise:

      despite this understanding, the child still doesn’t quite get the concept. In that scenario, do we continue to hold onto the idea that the child is at fault for lacking intuition or perhaps having a lower IQ? […] When someone fails to understand an explanation, is it fair to automatically assume the problem lies with their ability to comprehend […]?

      I certainly think that it’s not fair to automatically assume the problem lies with the other person’s ability to comprehend, in fact I try to make it a habit to always default to “maybe I haven’t explained myself well enough” instead of “you didn’t understand what I said”. 99% of the times the problem is not IQ or intelligence however you want to define it, that said I think there exist the possibility that someone with the necessary foundational concepts can’t understand something whatever the explanation is, in that sense I don’t think that anyone can understand anything.

      is the real challenge here about intuition, or is it about knowledge?

      I think the challenge is about both: I treat prerequisites as, well, prerequisites; so if you don’t have them there’s no amount of intuition that would fill in the gaps. Once you have the necessary prerequisites then what you need is an intuitive explanation of what you’re trying to understand, in editorial’s terms that would be an informal paragraph where the author explains the solution in the simplest way possible, before writing the mathematical proof that the proposed solution does in fact work. After that you need to practice and “review the material” as much as possible to build an intuition around it and make it second nature. Note the difference I’ve drawn between the intuitive explanation (as in “simple explanation”) which is something a lecturer can give you right off the bat and the intuition about a problem which I think doesn’t come before comprehension but after it, only with time and practice. A lecturer can at most be able to tell you what sparked his intuition, what was his though process, but I don’t think he can infuse you with the intuition he built for himself over years of practice.

      In certain cases there are shortcuts or ways to fake having built an intuition, for example I recently solved 1993D - Med-imize with the help of Shayan ’s video (because I couldn’t understand the editorial) and learnt a trick to calculate the median of an array with binary search, then when in contest I saw 1998C - Perform Operations to Maximize Score I defaulted to that same trick and managed to solve the problem, but I don’t think it’s fair to say that I had already built an intuition, I just read the keyword “median” and applied that same trick but true intuition shouldn’t be based on keywords, at least not only on keywords, otherwise you risk doing things like applying dp each time you read $$$n \leq 10^5$$$ which is a recipe for disaster.

»
6 недель назад, # |
  Проголосовать: нравится +24 Проголосовать: не нравится

I coach hs students for olympiads and it is very hard to make explanations that people can understand and get intuition for. You need to have a very strong intuition about the topic yourself and on top of that you need to try to put yourself in the shoes of someone who doesn't. Of course there are some people who don't even try, but I don't blame those who do but fail.

When I was a beginner I also suffered with explanations that were very difficult to understand, but sometimes you just need to try to reverse engineer the thought process behind the solution (or even better, come up with another thought process that makes sense to you). It's a painful process but it's possible!

  • »
    »
    6 недель назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Do you think part of it is the curse of knowledge? I think it was Um_nik who said when upsolving it is important to look at your original answer and consider what you lacked in your original attempt to solve the question. I think that is quite profound.

»
6 недель назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

I think some of this can be explained as what I call as "rating gap" in problem solving. Essentially, we may have assumed incorrectly that each problem has one, unique solution that is suitable for all ratings. This is already wrong for actual problem solution most of the times (e.g. people >= red may find advanced techniques say segment tree more favourable to funny tricks that happen to avoid it), but this especially false for the ways to come up with the solutions.

Here are some reasons why this is true:

  • Some ideas are not essential, but they just help a little bit: This usually refers to experiences on the problems that are not logically part of the solutions, but helps you branch-cut the solutions that you will be thinking about. 100% these ideas would help me in solving the problem, but it would be useless (or, not worth understanding them because benefits are small) for others.

  • Skills and "thinking power" limit: Some thinking strategies are only advantageous to people possessing enough thinking power. The simplest thing is attempting to make proofs: even easy problems may require a difficult induction proof, and I can see for many people that attempting to just guess it seems like the route with higher success chance (and take the risk of the intuition failing)

  • assuming things: there are so many things that is possible to say as trivial (importantly, so many things that are never trivial regardless of ratings). These are "predictable" ideas and you just have to learn essential once. Stuff like how to implement a dp, segment tree are some concrete examples, but there are many things that are not concrete (so not concrete that there is not enough space to write it)

In many cases, I think an editorial that explains their thinking process is only completely useful, if the writer is of a similar rating with the solver: then the process they used to think is likely similar. If this is not the case, then you likely need to use some one-on-one interaction to find what is the most useful thinking to them.

The next best thing is trying "pretend to write the editorial as newbie/cyan/orange" etc. This has practical limitations: it is hard to actually pretend to know "what was it like to think when I was X". And also that no writer would have the patience to write 7 versions of the same editorials with not-so-subtle differences.

In many cases, unless you have someone one-on-one able to interact/question with, the third best thing is a concise, correct editorials that include all proofs. That way, even if you find the author's intuition to be not helpful, you can make your own interpretation of the solution, and learn based on.

Related note, in many cases I never find editorials as "actually teaching you how to do it", but it is most similar to a database: Even when reading editorials, you are trying to solve a problem on your own, but you can now query for particular missing pieces to what you are thinking within those words. (e.g. what is the next step, why a step like this works). That is why I think is perfectly fine to skip over details: if you skipped over it then it is not important you anyways (it will cost you, but I am saying you could not have learnt it effectively by going through editorials on this occasion anyways). Assuming you will implement the problem, you can read it again when you realised you actually need the detail.

»
6 недель назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I don't know but reading this I can relate a lot that understanding editorials is itself a task. Btw nice explanation and writing!