Hello Codeforces! Because in April I have a lot of free time and I want to improve my CP skills, I will try doing a virtual every day for a month. I don't know if it's the best practice method but I'll still give it a shot. To keep myself motivated I'll update this blog once a week(?). Feel free to join along!
Starting Rating 758 Ending Rating: ?
Day 1: I did ARC 158 where I only solved A
Day 2: CF862 solved A,B quite fast. Unable to solve C with binary search on set(lowerbound). Performance : 1193
Day 3: CF861 (virtual) Solved A,B fast (trey were standard) but got 3WA. I tried C with backtracking but I realized it is too slow. Performance : 1315
Update 1:
Day 4: Today I did CF863 div 3. Like someone mentioned this contest felt like a div 2.25 (at least for me). I managed to solve A,B,C quickly (but still they were a bit tricky) and spent like 1:30 trying for D,E but with no progress. Performance : 1318, Almost reached pupil
Day 5: No contest today :(. I solved 1805C from 862_DIV2 (DAY 2). In the contest I was close : I proved that (b — k) ^ 2 should be < 0. But I didn't realized that we can use upper_bound to look for k since a,b,c are fixed. I enjoyed this problem, it has a nice solution.
Day 6: I tried D from same contest, but I needed to learn All longest path from CPH (competitive programmer handbook). I did that but still got TLE on 8 and I don't know the reason why. My solution seems O(N).
Day 7: I started solving problems from this blog :https://mirror.codeforces.com/blog/entry/114789
Solved:
1519D (1600) I didn't come up with the solution, but when I checked the editorial is was a trivial N^2 dp. Maybe if I spent more time before checking the editorial I could have solved it. Nevertheless a good problem for a beginner with dp.
1324D (1400): Solved using segment tree, probably a huge overkill and the code is not clean (but that is the first solution that came to my mind). I also got lots of WA because I didn't make the segment tree big enough (size).
1808C (1900): (C from Day 3) This problem was surprisingly unintuitive. I'll briefly explain my solution:
1) Eliminate the common prefix.
2) Iterate over the next 2 digits and set the rest of them equal with dg1 and after = dg2
3) Update the best answer that satisfies the constrains
This works because for each pair of digits we only care about the best answer. Since the first digit of a and b now is different we know which is true: either our number is surely < b or surely > a (we discard the other options) so now we can set the rest greedily equal with the max digit (that we set) if we know that x < b or the min digit otherwise.
Conclusion after a week: Don't expect big improvement after working only for a week.
how to check your perf on a virtual
Good question. I use CF visualizer and binary search for the initial rating until the delta is 0. :)
For codeforces virtuals I use https://cfviz.netlify.app/virtual-rating-change.html
You can use this Link. It shows a whole graph of rating changes and performance in virtual contests just like in real contests. I personally like it.
I don't think this is a good way to "improve" your CP , however if you enjoy you should probably give it a try
so what's a good way to improve CP?
Since one contest has only a few problems and should cover a wide range of difficulties, there is usually one problem in your interesting interval, rarely there are two, sometimes there are none. What I’m trying to convey is that in a contest your goal is to solve the problem that you already know how to solve fast. By doing X you learn how to do X, so by participating in contests you learn how to solve problems fast. But then where do you learn how to solve problems
You can refer for Um_nik blog for some pro tips about how to practice
The main idea of the "challenge" is to build consistency and I think that is valuable in any area besides CP. I will also try to upsolve the problems afterwards because there is how I think you get the most improvement.
You better write about what you've upsolved rather than what you've solved
I like this suggestion a lot. I'll try to upsolve problems from every contest I take and I will add them to the blog (especially what I was missing during the contest). I will keep y'all updated!
If you're not gonna upsolve after the contest then it's not gonna be an effective way of improving. During the contest you usually do stuff that you anyways can do and just the contest can help you to improve the speed and stay on form. But in order to improve you need to upsolve the contests. Instead of you I'd just virually participate in less contests but instead spend more time upsolving.
Good point. I think this way of practicing is valuable because the consistency you build but in order to improve you also need to upsolve the problems. If I feel like I am doing to many virtuals, I might take some days where I only check the editorial and solve past problems.
Solving problems is not a way to really "improve" your CP skills. In my personal perspective, solving problems helps you to master what you have learnt. So along with solving problems, new algorithms and data structures are required.
Anyway, if you enjoy doing virtuals you may let it a try, but remember to do exercises also <3