Hello everyone,
I'm asking for some help about how to train my schoolmates for Regional OI. Most of them have a fairly good MO background, so they are supposed to get good even if they don't practice at home (i.e., I think the $$$2$$$ hours a week at school should be enough to qualify to National OI). However, the results so far are quite disappointing: I feel I'm doing something really wrong.
Format of Regional OI
The statements are here (requires registration). Each year, there are usually
- $$$2$$$ easy problems (let's say A, B);
- $$$1$$$ standard DP with a twist (C);
- $$$1$$$ standard graph problem with a twist (D).
A < B < C < D (in order of difficulty and points). They are similar to Div. 3 C, D, E, F. Solving A and C is enough to go to National OI.
Schedule of this year
The training started in October 2021.
- October - November: introduction to C++ and STL (in the CPH, they correspond to chapters $$$1$$$, $$$2$$$, $$$3$$$, $$$4$$$, part of $$$5$$$, part of $$$6$$$)
- December - January: dynamic programming (chapter $$$7$$$)
- end of January: ad-hoc, number theory (chapter $$$21$$$)
- February - April: graphs (chapters $$$11$$$, $$$12$$$, part of $$$13$$$, part of $$$14$$$, part of $$$15$$$)
- May: Regional OI.
Results
- Initially, there were at least $$$20$$$ participants. Many of them dropped out of the training very soon. I actually expected this: the background of the participants was quite heterogeneous, and maybe it would have been better to hold two parallel training sessions ("basic" and "advanced"), but there was no other "trainer". Maybe this issue can be solved next year. Currently, there are $$$7$$$ participants.
- $$$2$$$ of them got a silver medal at National OI last year. The tasks I propose to the rest of the group are too easy for them, so they try harder tasks (but I can't pay much attention to them).
- About (most of) the others, I think they still struggle too much with implementation. More specifically, they don't have a clear understanding of what they are implementing. Examples:
Q. "Now you have to pick the unprocessed node with the smallest distance [in Dijkstra's algorithm], how to do that?"
A. "Adjacency lists?"
Q. "So, what's the time complexity?"
no one answers
I explain why the complexity is $$$O(n + m \cdot \log n)$$$
A. "This time complexity is so weird"
Result: at the end of the meeting ($$$2$$$ hours), there is someone who still hasn't finished implementing Dijkstra.
Of course, I can't blame the participants. In fact, the same "lack of understanding" happens to me when I try to solve physics problems.
Why does it happen?
I suspect the main reason is that most participants solved too few problems, but I haven't find a way to avoid this issue.
- I don't want to force them to do homework or train on their own. They have something better to do.
- I don't think solving a lot of
*800
rated problems is a good strategy. - When they can't solve a problem, I feel they just wait for the explanation and they don't strive to learn something new from the solution.
- It's difficult to find easy DP and graphs problems (i.e., I feel there is almost always a huge difficulty gap between "count connected components" and "realize that, after this modification, the problem reduces to counting connected components").
Examples:
- (4) abc217_e can be implemented with a priority queue, but it's not a braindead "use a priority queue" task. Maybe it's the easiest possible problem with these properties. However, I think it's already too hard to be used during training.
- (4) Same argument for Dijkstra's algorithm and problem 1433G - Reducing Delivery Cost.
- (3) 1433G - Reducing Delivery Cost has a similar solution to 1307D - Cow and Fields. The participants to the training had already implemented 1307D - Cow and Fields when they saw 1433G - Reducing Delivery Cost, but no one found the solution of 1433G - Reducing Delivery Cost.
Seeking for help
Regional OI is in $$$1$$$ month. I'm quite sure that all the participants to the training have the potential to qualify to National OI, but I feel I wasted that potential. Moreover, I don't want to repeat the same mistakes next year.
If you have suggestions to fix the "coaching" method, please write them in the comments. Thanks!
Thoughts on coaching grays:
The training is completely free.
I know.
Man I can feel you! I have conducted classes myself on DSA in my college and concluded that there has to be a distribution of this kind (bell curve?). In any class the educator remains the same but results varies on individual potential and interest. Just don't be too hard on yourself. For suggestions, establishing healthy competitions through regular practice rounds and/or rewarding merits with incentives(even recognising their efforts) might help (That was one of the promoting factor for me atleast). Other than that having direct 'regular' feedbacks from them might help, they understand what they don't understand better than any of us. Also, try visuals over analytics, if possible.
I am very impressed with your numbers! I started with 4 participants and arrived at 3 :p.
I mean I shouldnt be the one who judge you but , my personal opinion is : maybe they dont like the concept of cp , like its not just solving problems , you should solve them in a way you can code it and so on , I had a few friends who was doing cp for over 3-4 years actively , but they are still at pupil , ig they do cp cuz their family kinda forces them to do olympiads . What I mean is everyone encounters hard time in cp , and even If you hesitate a bit it drops your motivation even more and makes it harder to get things going again , As a solution I think you can either make your students love cp (idk how maybe just tell them why you like it so much ) , or you can tell them its hardness and eliminate the other ones (sorry if my english is bad)
I asked them. Average answer: I like CP, but I prefer math. Most people think that MO is more prestigious than OI (maybe because it's more popular).
No, no, and no! I taught math to hundreds of people almost the same way. Some of them got IMO medals, and some didn't improve at all. The success or failure almost entirely depends on the student's effort.
At first, I cared a lot if my problem sets were good when somebody didn't improve upon seeing them. Later I realized that my primary objective as a coach is to keep students busy and don't get them bored. It means making sure that they have problems to solve (and ways to do so) and the problems are not repetitive. It works just fine if the students are interested.
Don't label your students "grays." If you treat them as grays, then they will remain grays. I once thought that the concept of expected value was too hard for grade 10 students, and they ended up not understanding it in grade 11. Next year I taught it to grade 8 students, and by grade 9 they were comfortable with it.
Introduce programming constructions as a black-box way of solving some specific problem. I would not expect people to come up with priority_queue while studying Dijkstra in April after I taught it as "yet another stl container" in November.
I don't know how you teach problem-solving, but I often used to have live problem-solving sessions. I would prepare a list of problems with a reasonable statement and difficulty but not solve/think the solution through them in advance. I then gave a problem to the class and periodically suggested some ideas/ways of thinking about the problem.
The purpose is to teach people how to come up with general ideas, which is more important than studying a specific technique imo. It also encouraged them to try whatever idea they got, even if it was plain dumb (because I had dumb ideas myself, and they learned that it is not bad). Beginners often feel unsure about their understanding and don't want to try their ideas even if they get some, because they are afraid of failing and looking dumb in front of the class. This is especially important when their instructor is "too smart" and never fails himself.
imo, a good CPer has 3 things:
can code quickly, efficiently, and without bugs.
knows standard ds/algos/tips&tricks (some examples: sqrt-decomp, dp, centroid decomp, seg tree, sparse table, kruskal's, etc).
good mathematical thinking, logic, problem solving, etc
people with mo background are good at 3, but need to hone 1 and 2, which takes time. I vehemently disagree with sentiment " they are supposed to get good even if they don't practice at home"
If someone is already good at math, no need to teach them CP specific topics. They just need to learn programming in general. Implement some games maybe. After they get used to programming they easily reach blue level. Then start teaching CP specific topics.
I thought this approach was overkill (e.g., I can't implement a game), but maybe it's worth trying.
Btw why is the blog being downvoted? I know it's slightly off topic, but I don't know where else to ask others' opinions about this issue. I guess there are a bunch of people in this community who have a successful coaching experience.
Maybe to arrive at 69.
It went from $$$80$$$ to $$$64$$$.
UPD: it reached $$$69$$$ and it went down again. I don't mind downvotes, but I would like to know the reason.
Downvote waves.
Coaching is really hard ><, I also help some people at my university and sometimes things doesn't go as planned.
I think a good question is: how much do they do on their own? When I first learned Dijkstra in a class I thought I understood everything about it, but later when I tried to explain it and proof its complexity I realized I didn't understand it at all. I think some students just accept things just because you said it and don't try to think too much for themselves, not only in class but also when upsolving problems. I think the point of upsolving is not to just understand the correct answer, but to try to find ways to better your thinking based on why you couldn't solve it (sometimes you can't solve a problem because you didn't knew a very specific trick, but most of the times that is not the case). For example, once I realized that I started coding too fast once I thought of a solution, but if I stopped and thought for some minutes I could simplify a lot of the code or find a simpler solution. After some conscious effort I'm doing a lot better in that regard.
In my opinion the students have to do as much as possible on their own, and the coach has to provide the best possible environment for it to happen, but in the end is their effort that is going to make a difference. That said, you're probably doing a good job.
Dude, the "I think the 2 hours a week at school should be enough to qualify to National OI" just killed me. I can't imagine what mAThimaTIcaL baCKGroUND your schoolmates should have in order to score decent in National OI. 2 hours a week is barely enough for what you want from them. I heard many people on CF tryharding CP 8 hours a day (which is too much, I guess) and still not reaching cyan.
I think, that learning "general problem solving" is much more important, than to remember what priority queue is needed for. Try to teach them on how to come up with AC step-by-step like "You see n <= 10^5. That could be O(n*log(n)) or something" or "What do you think about when you see |f(x)| in the statement?".
Grinding tOPicS might be worth it when you see them having problems with guess what — specific topics.
Math background: if they lived in another city, most probably they would qualify to National MO (the cutoff in our city is much higher than elsewhere).
Yes, after many of your comments I agree with the fact that "DP with a twist" and "graphs with a twist" are much more difficult than I thought, and focusing entirely on those topics to prepare for Regional OI is not optimal. Maybe just solving problems from Div. 3 or AtCoder Beginner Contest is a better strategy.
2h per week feels very small. Do they do much homework at their own level of skill?
In my highschool days I completed in physics Olympiads. I think it was slightly more popular than informatics at that time, but overall comparable.
We were spending 4h in regular physics classes plus 2-3h per week on Olympiad problems. That was supplemented with ~6h of homework of competitive problems. And I think homework was key to keep us challenged at our own level.
During the last week before competitions (regional or national level) we were training full on 30-40h / w.
With that volume of training I was able to get to high Bronze at national level (Ukraine). Kids from other years got medals at IPhO (including a gold once). Those that trained at half the throughput couldn't get to national level, but still comfortably got medals at regional.
just tell them to git gud smh