Hi,
as usual, when you ask someone in codeforces tips on how to improve with the most amazing feature of this site has (that's constant contests rounds), they are all equal: compete, read all problem statements and then read the editorial to solve the unsolved ones. I follow this step by step, but when I reach the last one I fail completely.
What I mean is, why is so hard to understand most (Most because from the top of my head I can recall really good editorial writers like zscoder and Errichto) of editorials here ? Sometimes is like the contest writers want us to get inside their brain and understand what they mean by some paragraph. I get it, is really difficult to be great in explaining things, maybe the hardest thing in the job of creating a contest.
But sometimes I think it only requires time and effort. Some of the most interesting contest & editorials I've seen had depictions of how the idea of the algorithm works, or lots and lots of tips before giving it out, or even displaying the content needed to be already understood to get this question right (which is one of the most effective, for me =] ). It's really not great to try your best to improve on some contest and fail at the final step, even if you read 20x the same paragraph you wont understand.
I'm glad we are here as a community and everytime I stumble on a difficult explanation, I quickly go to the comment section and find about 3 comments teaching their way of doing it and they are crystal clear! Also 5 comments complaining of how difficult it is to understand what was written, and most of the time the author is there to help out, but if the editorial was written more carefully this wouldn't be necessary at all.
I think what is missing is empathy. Empathy on how the people that did not solve that question is going to read that explanation. Those are your targets. People that don't really understand and maybe don't have the background to get the idea as you, problem setter, do. Focus on how you are going to explain a idea of your algorithm to a person that is not a programmer, try to explain with figures, with tips, use everything in your hands. After doing so, ask some friend of yours, to try understand your text and explain it to you and so on.
Teaching is hard, really hard, but rewarding. I think the community would really improve with great editorials.
Does someone experiencing this too? Let's discuss it. Help our writers to improve too.
To problem setters: get this post as a constructive critique. The job of creating good and interesting contests are really hard alone, but don't forget to put the same effort on the explanations. Cheers!
I have been struggling with the same too for a long time :(
I have made this same comment before also but I don't receive responses. Generally if I stumble upon a problem where I don't understand the editorial or maybe I have a solution in my mind, a wrong one, but don't understand why is it wrong, or maybe some small implementation mistake, in this case I rely on the community to help me out; I have asked a doubt or two in some problems as a blog post, in a general trend they tend to get downvotes and no answers. Its really disheartening and sometimes makes me want to give up. This also limits the scope of improvement. :'(
Yeah, I fear that some users here have some kind of prejudice against low rating users. Whenever they slip on some comment or anything, you'll get downvotes. It's a sad truth.
As much as I agree such prejudice exists, I think most blog that ask how to solve problem get downvote in general. Of course, there are those that get upvote, though most of the ones that get upvoted have interesting problem instead of "how do I debug this" or "what is wrong with my code".
Honestly I much prefer cryptic, concise editorials. If you have tried the problem hard enough, then it usually clicks and it's all you need to solve it.
I really don't think editorials should be complete tutorials that take you from not knowing anything about the problem to completely solving it. That would be boring, and easy for someone reading it to fool themselves into thinking they learned something.
Without doubt this is one of the best ways to really create the answers yourself and learn. But there are ways of making the editorial interesting and challenging. See my comment below.
Can you give an example? In my opinion, there's usually enough material and even if there isn't you could try understanding the solution by looking at someone's code (I know I've done this a lot because not everything has an editorial available). Sometimes I find myself stuck on a problem for weeks and then suddenly, it could be while eating dinner or taking a shower or in the middle of a class, I understand the missing piece of the puzzle and then the editorial makes perfect sense. Not understanding it usually means that you don't know something you need in order to solve it, that might be something good to add: a list of "requirements". But even then, the missing piece might be a tiny detail that doesn't seem clear at first but after you understand it you'll take it with you forever, you usually can't list those as requirements.
The only bad editorial I've seen is one where the explanation for a problem was the title of the problem and only that. Editorials don't need to be a "step by step" explanation for problems, some problems require it because they are really tricky but I don't think you are talking about those. If you need a "step by step", you should really look at someone else's code.
I completely understand your point of view. Since I also get the same feeling when the insight comes and the editorial looks easy. But that's my point. There are ways of making the editorial interesting for the reader. Like making hints: http://codeforces.me/blog/entry/49412, http://codeforces.me/blog/entry/48871, http://codeforces.me/blog/entry/52228. Or making requirements, as you said: http://codeforces.me/blog/entry/47169.
My point was that the "acceptable" pattern of an editorial here is a paragraph discussing the idea really softly and quick. Where one could ignite the insight or the just a little flame to the first correct assumption for the solution. That works too. Those type of editorials are not that common and in my opinion, they should.
Thanks for your input!
same thing is happening with the educational rounds too these days, the rounds that are meant to be for "educational" purpose.
I completely agree with you. Many of the editorials on codeforces (and most other competitive programming platforms, to be honest) are only understandable if you've already solved the problem or are close to doing so. They're often written by reds who assume the solution is clear once they give the high-level idea, but I can see that it wouldn't be for beginners.
Hi
I used to face this issue in the past too. But it's really good to solve the problem even after reading the editorial, because as you said the solution is not clear even after reading it. So try to absorb as much as you can from editorial, then take pen paper and try to understand it on your own.
If you really fail to solve, then you can also see the code and try to figure out what the solution is.
If you still fail to solve, then either leave it for now and come back to it some other day or comment asking for much clearer explanations. I guess someone will help.
This way, you will build up confidence and your analysis will improve too.
I look at the code of other people. Some of the time you can find a person who has commented their code with explanation (kind of rare) or uses good naming (more common). (Don't bother looking at the editorial code if you open it and it's just a bunch of "idx[MAXN], a, b, K, cmp, id, vak, mfl" and things like that.) From there I can figure things out with a deeper understanding than editorial gives me. The editorial might say "use this thing and this other property of the thing and then some weird math notation + use something in a cool way and we have the answer". The part about computing the answer is sometimes hard for me to understand, but I find it easier after looking at some really good player's code.
I think this is a classic example of curse of knowledge
Another thing I personally hate:
If code is provided (which is good), but the code doesn't stick to variable names given in the problem statement. Very confusing...
One of the things I hate about editorials is author getting to the solution directly without explaining how they came up with such specific solution or why they used such technique.
Why don't u authors elaborate how u came up with solutions and why, instead of just typing a specific solution directly to the editorials.
I don't there is really that much to talk about. A lot of the time solving a problem is just intuition and experience. Sometimes you can share some cool story about how you arrived at the solution but most of the time it is far more mundane.
I will try to answer some questions raised in blogpost or in comments based on my experience as problemsetter and editorialist. It is only my point of view.
Q: What should I do before reading an editorial?
A: Try to solve problem yourself. Spend at least half an hour trying to understand what is problem about. You should at least understand statement well before reading an editorial. It will be easier to understand the editorial if you will understand on what topic problem is. Editorialist can (and will) assume that you carefully read the statement.
Q: Why can't I understand editorial, its main purpose is to be understandable!
A: Maybe you are trying to read an editorial to the problem which is too hard for you now? I think that almost all of the editorials should be of equal length. For easy problem there should be step-by-step explanation while for hard one only main ideas are enough. If the problem is three levels higher than you are, detailed enough (for you) editorial will be waaaay too long and boring for those people who really can solve this problem. Sazzon says that I should explain the solution like the reader is not a programmer. WTF?! Why are you even reading solution for div2D if you are not programmer? Should I explain how loops and ifs works? And those apply further: if you can't solve div2C, editorial for div1D is not for you.
Q: I came across unknown term which is not explained in the editorial. But editorial's main purpose is to be understandable!
A: If you don't know some term or algorithm mentioned in the editorial, then google it yourself. It may be the case that the problem is some variation on well-known problem/algorithm. And editorial will assume that you know what is that well-known problem/algorithm about. If you don't know it -- try to google or ask for help in comments. I see my job as explaining how to solve this exact problem using some common techniques. If you don't know those techniques -- I'm sorry, go and read some tutorials first. I can talk about how SegmentTrees/FFT/Flows/SuffixArrays/etc. works for hours. It is not the purpose of the editorial.
Q: OK, I understand how to solve the problem. But how did you come up with that ideas?
A: I agree that it can be really interesting to hear. But it is kinda hard to explain on paper, without some pictures and not 'waving hands'. I can't tell you how my brain works, and you ask me to do it in a short understandable form! And for easier problems it can become even worse. Sometimes people ask me like 'How did you understand that you can do a binary search (or whatever)?' and I don't know what to say. Because... I didn't understand it in some specific way, it was obvious all the time. It can also be a situation when the solution was before the problem.
And some additions:
- I try to make editorials short and clear because long texts are harder to read
- It is hard to express my ideas in English so I'm trying to avoid complex language
I think editorial should be short, and only contain hints.
If editorial is very detailed and you understand everything very easily and quickly, most of the time you won't really remember anything the next time you see similar problems. Why? Because without you actually think very hard about the problem, your brain can't create "path" that connect concepts of the problem. It can't really understand key ideas and uniqueness of the problem.
In case you don't know an algorithm: Read book. Few lines in editorial won't make you really understand it.
In case you don't know how to implement an algorithm: Read other people code. When I learned to code almost 10 years ago, I could not get code easily like you can now on CF. I had to add random people on Yahoo, begged them to give me their OJ accounts/password, so I can read all their code. Now you can read code from people like tourist, Petr, rng_58...
If you can't solve a problem, it is fine. Solve other problems and come back later.
When I learned to code almost 10 years ago, I could not get code easily like you can now on CF. I had to add random people on Yahoo, begged them to give me their OJ accounts/password, so I can read all their code.
woah, did it work? Who did you ask?
Yes.
We had a Vietnamese site on SPOJ, and a forum for discussing CP (mostly discussing Vietnamese OI and problems on SPOJ).
I looked at top Vietnamese users, added them on Yahoo. The Vietnamese community is small and we (Vietnamese people) used to chat with random people on Yahoo so it was not very difficult.
Asking for accounts work some of the time since it was not too uncommon: people in same high school sometimes share account so their junior can learn from them (not at my school though because we were too competitive on OJs =))).
Codechef editorial are explain broadly , i think codeforces editorial should be like that . Errichto is an awesome editorialist .
because you are stupid maybe