Hello Codeforces!
I am excited to share with you my competitive programming innovation which successfully propelled me to master (2100+)! This is the ThemeCP training method, which stands for Themed Codeforces Progressions. Use at your discretion -- your Codeforces practice may get too effective and addictive!
Want to read this blog in document form (with images)? Check out the following Google Doc! https://tinyurl.com/themecp
What is ThemeCP?
ThemeCP is an experimental training system wherein users train on a perpetual ladder for ratings in [900, 3500]. The system is based on two-to-three-hour, four problem mashups with a common “theme,” ideally done every day. Read this post – you could be doing your first ThemeCP round just 15 minutes from now!
UPDATE 12/3/24: From Geothermal's and arvindf232's suggestions, for those rated 2450+ (level 55+), ThemeCPs have time limits of more than 2 hours. Rating calculations have been adjusted accordingly on the Google Sheet. Corresponding changes will be made on the website shortly.
Steps
Manual Method
- Determine your initial level using the attached level sheet (here). For example, a 2300 rated coder starts at level 49.
- Create your ThemeCP at your level! Select a random topic among the topics listed here and four problems in that topic. The method you use isn’t very important. As for me, I use AC’s TLE bot (server invite link here) to select a random problem of the highest rating, select a random topic (among the random problem's tags, then considering only the listed topics), then select three more problems with that tag. For example, a level 49 mock would be 1700/1900/2100/2300.
- Begin your ThemeCP! The ThemeCP template can be found here. Solve the problems in order of difficulty!
- If you get an AK (4 of 4 solves), increment your level by 1. Otherwise, decrement your level by 1. Remember to upsolve the easiest problem you didn’t get during the mock! This is very important.
- Repeat from Step 2. Take a short break, and cherish the fact that you trained productively. You can also use the ThemeCP tracker here!
See the following YouTube video for a Level 45 (rating 2200) demonstration of ThemeCPs: https://www.youtube.com/watch?v=-OFNTD315-w
Automated Method (beta testing)
You can use Tenz1n's website which does all of the steps for you! Backward compatibility, i.e. uploading ThemeCP data from a Google Sheet made through the manual method, is currently under construction and is expected to be released by December 10, 2024.
Why does it work?
ThemeCP lets you train with problems in the entire difficulty range [rating-700, rating+100] you have a decent shot at solving. This balances difficulty and skill and keeps you in the "flow state", simulating your experience in an actual contest!
Even though you are training with problems slightly below your expected rating, not all problems of the same rating are equally challenging for you. In fact, your built-in strengths and weaknesses carry a +- 200 differential on any given problem! Therefore, this system exposes you to problems in the entire range you could plausibly solve in a contest.
Furthermore, ThemeCP’s high success rate, self-balancing at around 50%, keeps your motivation high. Failures increase your success rate (literally), and successes prove your improvement!
Efficacy
ThemeCP has been tested by over 100 Codeforces users, collectively completing over 600 ThemeCP rounds! ThemeCP has been used as the Philippine NOI's selection process for the country's year-round informatics training program. Based on the extensive data, we estimate that each ThemeCP round increases one's true Codeforces rating by approximately +5 for ratings below 1400 and +2 for ratings above 1900.
In addition, multiple IOI medalists have practiced extensively (10+ rounds) with ThemeCP with overwhelmingly positive response, citing it as a great way to get themselves to practice throughout busier school times.
Anecdotally, ThemeCP gave me a consistent training routine, and I believe that training is solely what caused my improvement. ThemeCP was simply the catalyst to training in greater amounts.
Inspiration
Around a year ago, I was reading self-improvement books to optimize my training/study habits and improve my lifestyle. One such book, called Atomic Habits, stuck with me. The ThemeCP mechanism draws inspiration from this New York Times bestseller. I incorporated three of four major ideals for a habit to be self-propagating: make it (1) attractive, (2) easy to continue, and (3) satisfying. The fourth ideal, making it clear to do, is up to you. Make ThemeCP your habit today!
Credit
The concept of ThemeCP was formulated in early 2022 and has since gone through multiple significant changes. The current version of ThemeCP was realized in early 2024.
I sincerely thank the following members of the Codeforces community for their contributions to the development of ThemeCP:
- Marinush for his troll blog that inspired the leveling up/down system of ThemeCP,
- Tenz1n for his amazing implementation of the ThemeCP mechanism,
- ACGN, Avuvos, drdilyor, MetalPower, Rideris, tolbi, vinhhocptit, and warmingcium for their feedback on ThemeCPs,
- arvindf232, galen_colin, and Geothermal for their esteemed veteran advice,
- DippleThree, Shisuko, verngutz, and wfe2017 for administering ThemeCP as part of the Philippine NOI's training program, and
- the countless NOI.PH highschoolers who did so many ThemeCPs!!! I can't tag all of you, but you contributed a LOT to the development of ThemeCPs!
(Bonus!) Website Implementation
My good friend Tenz1n has created a website implementation of the ThemeCP training method! It is a full implementation of the ThemeCP mechanism.
Go check it out at https://themecp.vercel.app/ !
Feedback
Do you have any feedback for us? We would love constructive feedback on ways to improve the ThemeCP training method! Please comment what you like or dislike about ThemeCP, and if you have any suggestions, please comment them below!
As one of pwned's trainers from his IOI days, the jump in skill from before and after he came up with and started doing ThemeCPs was insane!
Since I am still working on adding the option to upload old ThemeCP contest data, please join the ThemeCP discord server and send me (handle: 10zin7457) a public link to your ThemeCP google sheet!
If you're not sure how to practice, I highly recommend this method! It helps you focus on specific topics with increasing difficulty, offering plenty of easy problems to enjoy and tougher ones to challenge you.
It also feels like a real contest with its own rating system, so you can track your progress and see improvements quickly. It's a great way to improve while having fun!
Login function on website is broken atm!
+1
Sorry for the problem, it should be working now.
I tried too, didn't work for me. Maybe I'm doing it wrong, just submitting some CE to the opened tab
R u still facing the problem?
https://mirror.codeforces.com/problemset/submission/1361/294653357 https://mirror.codeforces.com/problemset/submission/690/294596558 etc, still doesnt work :(. All CE's that I submit after the redirect
Did you wait for 1-minute and not hit refresh after submitting compilation error? If you are still facing the issue join the discord group and ping me there i will help you.
I did it just right now, and it worked perfectly for me
It seems like login is not working.
Sorry for the problem it should be working now!
pwned orz, thanks for sharing this great resource with the community! Sounds like fun and can't wait to try it out.
Great idea and website. Initially I was skeptical of this, and I didn't have chance to try it since I didn't do competitive programming since march. But it looks very promising now, I will try it once I start CP again :)
As part of the NOI.PH community, ThemeCP is a must and is highly recommended for beginners who are new to competitive programming. Yes, ThemeCP gives out a better performance as you keep doing problems within your ThemeCP everyday! As penchick would say:
PS: Join NOI for penchick lore!!
pwned will it be paid oneday?
ThemeCP is inherently a system of training (which I shared in the blog), and anyone can do ThemeCPs without paying a single cent! Making a copy of the spreadsheets already makes it free to use.
Tenz1n is in charge of the website, and only he could say whether it will continue to be free.
For now am not planning to made it paid, it will be full free to use the website. But since i have to bear the charges to host my website, and suppose there are lot of traffics dialy and this charges goes too high I would make a donation system first rather than making it paid directly. But for now not planning to convert this into paid system.
in case the costs will go too high and donations won't cover them, is it possible to open source the site so that people can just localhost it?
yes definitly if the situation becomoes like that, will open source it.
I like this lol. It leverages the benefit of virtual contests and the desire to see more active adjustment of one's rating. I'll probably give it a shot.
i went from 1200 to 1500 peak using this to train
stuff's actually legit
Nice initiative! This seems like a pretty good way to practice--I did something fairly similar while I was training this year, and I like how this approach automatically calibrates to an appropriate difficulty.
It'd be nice to add options to tweak a few parameters: - Number of problems--four problems in two hours is a lot if the problems are close in difficulty level, and problems at the high end of your in-contest reach may take more like an hour each. I think doing this - Practicing individual topics is great when you're first starting to learn a new concept, but I think there's a lot of value in learning to approach problems without advance knowledge of the topic involved. It'd be helpful to have an option to choose problems with distinct topics. - I recommend biasing problem selection in favor of newer problems for more accurate difficulty estimates, higher problem quality, and more relevance to the current meta.
did you retire ?
Thank you for your advice, Geothermal! We will work to implement your suggested changes.
We are working on implementing dynamic time limits to the rounds at sufficiently high levels, with time limits increasing starting from rating ~2400, as 2 hours, all the way up to the highest ratings, where the time limit would be closer to 3 hours.
Update: Changes have been made, making ThemeCP rounds longer for users at level 55+ (rating 2450+)!
This is a very interesting idea, but there is a serious flaw in the formula.
Time to solve scales with the problem rating, and even being higher rated can only bring it down so much. For my level: 3125 = 2600/2700/2900/3100 being able to solve all four in 2 hours is at least a 3500 performance in an actual contest. A 35 minutes solve of a 3100 itself is worthy of 3500 performance.
I feel like the time limit must scale from 2400 onwards (in fact, it may begin scaling as early as 2100), which I suggest 2h at 2400 and then linearly scales to 3h at 3000. I cannot say for any higher rating but I feel like it should still increase, but not to as much. It is possible to not scale the time limit, focusing on speed, but that would imply you are only solving problems quite a bit below your rating (not necessarily bad, but this should not be the intention).
Alternatively, some balanced choices between speed/difficulty is possible that is assigned the same performance.
Thank you for your advice, arvindf232!
Initially, ThemeCP had time limits ranging from 75 minutes to 210 minutes, but at some point, I decided to make all of the levels have a time limit of 120 minutes. Your proposal for linearly increasing the time limit starting from rating ~2400 makes a lot of sense, and we will implement your proposed changes to ThemeCP.
Update: Changes have been made, making ThemeCP rounds longer for users at level 55+ (rating 2450+)!
I should mention that my suggestion of 3 hours is assuming the modern ratings (say, from round number 1000 onwards). If old problems is to be used, then this could mess up the estimation a litte bit.
From what I feel, 3 hours could be taken as the maximum time limit so no further scaling is necessary. I say this just from the intuitive feeling that implementation (in terms of length, which is what forces time spent, not complexity), does not increase much further from the point of 3000. I could be wrong though, but that would be found out by other user rated higer than me.
if you start to use that earlier.... such that your friends can suffer for less time and submit your contest earlier....
Tried for level 22, the system runs well and the problems turn out to be easy for me, and I AKed undoubtedly. I came up with some suggestions during the contest:
There should be an end button, when I AK the contest, you should let me end in advance.
The random theme seems to select a theme for the four problems, might there exists a selection which we can get four different themed problems?
Anyway, I love this system, and hope it get better! Thank you for such a great job!!!
1) Yes we’re implementing that when you hit 4AC the contest will end automatically.
2) You can choose the combine theme, then all your four problem will be all random.
Thank you for your feedback!
Oh, I've just mistaken the meaning of combine to be "combination math" qwq
Thank you for your quick reply, and I still have one question, how is the performance calculated? It seems so amazing!
No problem it seems the name is creating confusion will change that name.
For the performance calculations I don’t have well knowledge since it was created by pwned. So he will be able to ans your question.
OK~
And still, old problems' rating are typically higher than their real difficulties. Your system fatch problems randomly, so sometimes it provides me with a problem which should challange me but is very easy for me, for example, This problem was just provided to me as P4 for level 22.
This situation seems hard to deal with, but hope there could be an improvement on this aspect.
What's more, might the system fetch problems which I have ACed before?
No the systems cross verifies and chooses problem which you haven’t attempted at all.
Yes we have also noted of ThemeCP choosing very old problem. Will fix that issue really soon. Once’s fixed we’ll announce it.
make sure to join the discord group to provide feedback, report bug, and get updates made regarding the website.
oh and how should i select dp problems?
DP option is added in the theme selection menu. You can check it out!
thanks. Also , does it mostly give old questions of a given rating or are newer ones (of recent years and months) also considered? because last i tried the site, it took questions from 8-9 years old contests
Yes, we fixed the issue now. Now ThemeCP will select from newer problems.
By chance if you face some really old problem [it's rare though] let use know
Great Work! Tenz1n
You also could've added a date filter adjustable for user
currently we have done selection of problem with help of contestId, since higher the contestId newer the problem. So there's extremely less chance that you will get very old problem.
Ending of contest in advanced when you get all AC's is now implemented. You can check it out.
great initiative, thanks!
Amazing and nifty tool to create your own infinite penchick race!
Looks very interesting, I will try it
I saw several opinions, that solving problems by a topic is a bad decision, since in usual contests you don't know the topic. (Also, as I understood, you choose the topic before the round, and your personal interests will influence the choice (i.e. I love A and hate B, so I will more ofter choose A and avoid B).) I'm interesting in more opinions about it.
do you have a wolf as a pet?
I had a wolf. It weighted 2.5 kg, but it indeed imagined itself as a true wolf.
it says you choose a random topic. However, I agree, it would be nice if there was a random mode, which just gives problems without a theme
UPD: actually, you can just choose from random topics. good tool!
You have an option to choose mixed theme. In that you won’t know which topic and all problem tag will be mixed.
I tried the website but its not able to add my codeforces handle
Once you click add handle, you should get a clickable link that says "submit a compilation error".
You should then click it, submit a code that'll get a compilation error verdict and that should work.
Is this geometry in your pfp?
I believe this is an Octree. I remember seeing it in a database course.
Thanks. It worked
I hope you clicked the link that appeared when you entered your handle. The link redirects you to a codeforces problem for which you have to sumbit a compilation_error. If you did not do it, you should. If it still does not work, try a few times and do not refresh the page. It will add your handle.
It seems great. Will test it out.
Also, if possible I recommend implementing some sort of weight towards topics the participant is leass gpod at when selecting random topic (or add a weighted option). Also, an option for non topic based contest would be nice.
it has a "mixed" option which, i assume, just polls random problems
Correct
Yes you have have a mix option which will generate random problem of all topic.
My primary point is on some sort of weight for topics participant is less familiar with. But it's great that mixed option already exists.
R you suggesting that more weightage should be given towards selecting a theme that the user is less familiar with?
Yes. Because it's more important to practice those topics.
Ok NOTED. Yes this is also a good approach of selecting problem.
Thank you for your suggestion!
I think it's a slippery slope, because you can't really gauge which topics are unfamilliar to user just by solved problems,
For example, I may be not very strong at greedies, but since div2AB are usually just that, I will naturally have a lot of them solved. However, I am pretty good at dp, which is not a very common appearing concept anymore, so I will have less of them.
I guess you can try to check how much of them you've solved in the specific rating range, but not all topics made equal, still one might be harder, bla bla bla
Check how long it takes you to solve them at some level compared to other topics on that level. Levels closer to your rating being more relevant.
However, I guess it's also possible for user to put some sort of weight on all the topics so that they can get what they prefer. Because you kinda know what you suck at.
yeah, i think user putting weights is the better solution
This is amazing! The only downside I can think of is that later I will not be able to participate in virtual contests (because I already solved at least one problem). There is no real solution but this should be an upgrade over virtual contest anyway since you can focus on "meaningful" problems. I would just miss the "ranking comparison" aspect and rating tracking on Anytime
Since Anytime does not work for Atcoder, it would be amazing if ThemeCP could also work for AtCoder problems. Then I can do virtual contest on Codeforces and track performance + rating, while using themeCP on Atcoder for focused training. Not a request; just sharing my thoughts.
Thanks for creating and sharing this tool!
Yes thank you for the feedback.We can’t promise but yes definitely will see from that side also and discuss about it.
gud
You can always open source! I think community would love to contribute, myself included
Yes am planning on that, soon i will open source it. I will post the updates about it in the discord group.
I couldn't add my account Please can you help
Join the discord group and message me their.
Honestly an underrated factor of ThemeCP is teaching consistency, since being able to increase your level depends on your ability to not only solve the hardest problem in a set but to AK with probability 50% or above, which translates to needing ~70-85% success rate for the hardest problem based on the spread of the problem difficulties.
Personally as a person that has used ThemeCP before I can confirm that this helped me go from wildly inconsistent (and I mean spreads like +600/-400 based on the topic) to just being somewhat inconsistent (+400/-300), and hopefully soon(TM) just normal inconsistency (+200/-200).
Edit: Now that I think about it this is especially true in the sub-1600 range. You can solve 5 problems in a Div 3 and still not get expert performance, while a slightly hard Div2C can easily allow a person to get 1600+ performance. The former shows decent consistency while the latter is essentially just 1 problem in 90-100 minutes. Also, fast solves on earlier problems denies the need to solve the hardest problem you can solve since it wouldn't give you that many ranks thanks to point gain loss/penalty gain.
just shows how much more valuable ThemeCP is since grinding out contests specifically for rating doesn't give an accurate measurement of your consistency but rather slightly more on the speed aspect
Hey, OP
Is there any way we can add friends to the contest, i mean my friends are getting back to cp and practicing problems , could be better if we can share the site together that way it would be more fun and competitive
++ a way to see how we performed against others as well if that could be possible in near future.
Yp we have make note of this feature. Might come in the future.
ill try this out, thanks for making this. i had 1 query though, in the website implementation, whats the difference between "random" and "mixed" topics?
So Random selects a random theme for you just if you don't specifically want to pick theme.
Mixed means it's a combination of all topic like actual contest where you don't know what topic the problem is based on.
login function classed me as unrated?
Join the discord server and ping me there so i can solve your issue
As someone who did a lot of ThemeCPs, I feel it's an incredible way to practice. The sense of "progression" is valuable, and it motivates me to spend more time thinking about a problem instead of looking at the tutorial. I've also recommended it to my friends in Indonesia.
Even though I stopped doing ThemeCPs for a while (because I was practicing for OI back then), I think I'll start doing it again. I hope that everyone will try ThemeCP too!
I did one contest and it was a nice experience, but when I tried to make 2nd contest, even if I enter the contest level, it says "Please Select Contest Level". Help!
R you still facing the issue if yes join the discord server and ping me there.
Guys, whats wrong with google login???
Join the discord server and ping me there if you are facing issue with login and cf handle verification.
I haven't yet started (only registered) but already addicted :)
Btw, I want to suggest everyone also write some notes about each problem you solve (if it teaches you something new). This will help you remember new tricks better.
The website is sooo s1mple and beautiful. Tenz1n — css god.
Should I make a spreadsheet to keep the track of the problems which I couldn't solve?
You don't actually need to keep a separate spreadsheet as if you are not able to solve the problem simply going in the contest history which is in the profile section you will get the all problem link of all the contest you have given. So you can see from time section, if it's null that means you were not able to solve the problem so you can just click on the respective problem index and it will take you to the problem which you fail to solve.
Thank You. Yes I was thinking of adding note section where you can add some note about the respective problem which you got to learn something new!
I am not able to add my CF handle. It always says failed verification. Am I doing something wrong?
Join the discord server and ping me there.