CP trainer — new tool for training

Revision en18, by michao, 2025-10-02 23:30:16

Hello,
I created a project for training and analyzing your performance during contests: cp-trainer.com. I believe it has some unique features not existing in competitive platforms and can provide as a more sensible tool for training, especially for more experienced users who have participated in bunch of contests already. Below I will briefly discuss its functionalities:

Problem recommender

Contest training picker

In this module user can choose one of the 4 contest modes depending what he wants to train:

  • Speed — Average time difference with problems of specific tag.
  • Hard problems — The contest consists of 3 problems from the list of 10 in the problem recommender.
  • Weaknesses — The contest consists of 3 problems, all from topics, that user is weak at. The rough idea was to take the random 3 out of 5 tags with lowest value from the metrics compute_tag_rating and for each tag take the problem with rating as close as predicted rating on that tag. In practice there was used some comparator, which also takes into the accont the freshness of a problem. (We rather want to solve the problems from fresher contests, since problems have changed a lot in past years).
  • Upsolve — The contest consists of 3 problems, that contestant didn't solve during contest (he either had rejected submissions on them or there were first problems during the contest that he didn't accept) with the best quality according to problem recommender.

Note : The duration of the contest (never greater than 5 hours) is calculated automatically based on the expected time to solve the problems (user should solve some problems to not get discouraged, but of course not all). The contestant can limit this time by setting the max duration (he doesn't have to), however it is not very recommended, because the system will just discard some problems from the problemset to adjust the time.

User stats

Compare yourself against the others

The idea for this section was to analyze for the user, how much he is worse than the average contestant with some specific rank. It was realized by taking statistics for 40 average random users across that specific rank , who participated in >=50 contests and were registered min 3 years ago. (that should approximate well the random user with some rank.)



We can see in the picture above the sample statistic of me compared with the average grandmaster telling what is the average time difference (in seconds) of solving problem with some specifing rating. As we can see, I am slower on the most of the ratings, especially in the hardest ones.
The included statistics are (the time unit is in seconds):

  • Average time difference by tag — Average time difference with problems of specific tag.
  • Average time difference by rating — Average time difference with problems of specific rating.
  • Average accuracy difference — Average number of submissions difference to accept the problem with specific tag. It can help to understand on which type of problems we have more problems in implementation.
  • Average highest solved problem — Average rating difference of the hardest problem solved in the contest. This helps to understand how much higher rated problems should we solve on average in the contest to be able to get some specific rank.
  • Average lowest unsolved problem — Average rating difference of the problem with lowest rating unsolved in the contest.

Note: The green bars mean there is contestant's advantage, red otherwise.

Summary

The goal was to create the tool which will analyze user's performance during live contests and then based on that recommends adequate problems for training. Most apps focus on the stats of the user also during practice, which in my opinion don't provide the best insight e.g. because outside the contest you have unlimited time and also you can look at editorial.

If you find any bugs, please let me know and I will try to fix them as soon as possible. Any constructive criticism is also appreciated. Thanks for checking out the platform.

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en56 English michao 2025-10-04 01:22:27 0 (published)
en55 English michao 2025-10-04 01:10:40 21
en54 English michao 2025-10-04 01:07:54 4
en53 English michao 2025-10-04 01:04:43 2
en52 English michao 2025-10-04 01:03:08 8
en51 English michao 2025-10-04 00:59:27 10
en50 English michao 2025-10-04 00:58:08 99
en49 English michao 2025-10-04 00:42:19 636
en48 English michao 2025-10-04 00:25:18 57
en47 English michao 2025-10-04 00:23:55 183
en46 English michao 2025-10-03 18:57:59 1584 Reverted to en42
en45 English michao 2025-10-03 18:57:35 1811
en44 English michao 2025-10-03 18:53:58 1097
en43 English michao 2025-10-03 18:51:46 1070
en42 English michao 2025-10-03 18:47:01 1370
en41 English michao 2025-10-03 18:17:00 1645
en40 English michao 2025-10-03 17:05:29 5
en39 English michao 2025-10-03 17:04:58 617
en38 English michao 2025-10-03 16:05:11 2766
en37 English michao 2025-10-03 16:04:27 16
en36 English michao 2025-10-03 16:03:19 34
en35 English michao 2025-10-03 15:58:09 635
en34 English michao 2025-10-03 15:46:18 298
en33 English michao 2025-10-03 01:20:53 19
en32 English michao 2025-10-03 01:17:03 9 Tiny change: ' each tag there is calculated the ratin' -> ' each tag we calculate the ratin'
en31 English michao 2025-10-03 01:16:10 10 Tiny change: '5c.png">\n\n<br/>\n\nThe incl' -> '5c.png">\n<br/> <br/>\nThe incl'
en30 English michao 2025-10-03 01:15:32 9
en29 English michao 2025-10-03 01:13:31 3 Tiny change: 'depending what he w' -> 'depending on what he w'
en28 English michao 2025-10-03 01:13:11 2 Tiny change: 'ipated in bunch of ' -> 'ipated in a bunch of '
en27 English michao 2025-10-03 01:01:14 5 Tiny change: '>\n\n<br/><br/>\n\nT' -> '>\n\n<br/>\n\nT'
en26 English michao 2025-10-03 01:00:52 193
en25 English michao 2025-10-03 00:57:59 2370
en24 English michao 2025-10-03 00:43:01 248
en23 English michao 2025-10-03 00:27:15 117
en22 English michao 2025-10-02 23:44:46 52
en21 English michao 2025-10-02 23:43:36 6 Tiny change: 'n that tag. In pract' -> 'n that tag + 200. In pract'
en20 English michao 2025-10-02 23:42:17 1 Tiny change: 'ms' rating's are base' -> 'ms' ratings are base'
en19 English michao 2025-10-02 23:41:53 428
en18 English michao 2025-10-02 23:30:16 1616
en17 English michao 2025-10-02 22:57:57 31
en16 English michao 2025-10-02 22:54:44 9
en15 English michao 2025-10-02 22:54:10 15
en14 English michao 2025-10-02 22:52:14 2
en13 English michao 2025-10-02 22:51:28 10
en12 English michao 2025-10-02 22:49:45 93
en11 English michao 2025-10-02 22:47:34 28
en10 English michao 2025-10-02 22:38:12 1154
en9 English michao 2025-09-29 00:50:06 9
en8 English michao 2025-09-29 00:49:33 377
en7 English michao 2025-09-29 00:36:46 74
en6 English michao 2025-09-29 00:35:11 137
en5 English michao 2025-09-28 13:19:36 729
en4 English michao 2025-09-28 13:04:51 286
en3 English michao 2025-09-28 13:01:03 19 Tiny change: 'g contests. [Website](https://' -> 'g contests: [cp-trainer.com](https://'
en2 English michao 2025-09-28 13:00:36 4 Tiny change: '). <br/>\n\nI believ' -> '). <br/>\nI believ'
en1 English michao 2025-09-28 12:58:14 299 Initial revision (saved to drafts)