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.
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.
1) I don't want to force them to do homework or train on their own. They have something better to do. 2) I don't think solving a lot of *800
rated problems is a good strategy. 3) 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. 4) It's difficult to find problems 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 "implement a priority queue" task. Maybe it's the easiest possible problem with these properties. However, I think it's already way 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 is actually similar 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.