Codeforces and Polygon may be unavailable from December 6, 19:00 (UTC) to December 6, 21:00 (UTC) due to technical maintenance. ×

pwned's blog

By pwned, 6 days ago, In English

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

  1. Determine your initial level using the attached level sheet (here). For example, a 2300 rated coder starts at level 49.
  2. 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.
  3. Begin your ThemeCP! The ThemeCP template can be found here. Solve the problems in order of difficulty!
  4. 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.
  5. 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:

(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!

Full text and comments »

  • Vote: I like it
  • +359
  • Vote: I do not like it

By pwned, 4 weeks ago, In English

Hello Codeforces!

We (pwned, ACGN, HappyPacMan, maomao90, AverageDiv1Enjoyer, and trunkty) are thrilled to invite you to Codeforces Round 987 (Div. 2) on Nov/15/2024 15:35 (Moscow time) (note the unusual time)! After more than two years of preparation and nearly thirty problems on our shortlist, our contest is finally here for your enjoyment!

In this round, you will help Penchick as he embarks on a world trip through the Philippines, Indonesia, and even through the Australian beaches and attempt six problems in two hours!

The score distribution will be as follows: $$$500-1000-1500-2000-2500-3000$$$.

This round would not be possible without the support of everyone behind this round:

Lastly, we thank MikeMirzayanov for creating the incredible Codeforces platform, where many of us have engaged in friendly competition, honed our problem-solving skills, and forged lasting friendships throughout the years!

From our keyboard to yours, we (and Penchick) wish you good luck, positive delta, and an exciting competition experience!

Note: There is at least one interactive problem, so please read the guide for interactive problems if you are unfamiliar with them.

UPD: Editorial has been posted, go check it out!

UPD: Congratulations to the winners!

Div. 1 + Div. 2:

  1. tourist, as expected, fully solving all problems in 53 minutes
  2. antontrygubO_o, who did so just 2 minutes later
  3. noimi
  4. A_G
  5. Pyqe
  6. StarSilk
  7. dyppp
  8. kotatsugame
  9. busamate
  10. tarjen

They, along with 8 other contestants, are the only AKers (full-solvers) in the whole contest!

Div. 2 only:

  1. LGlcx, who full-solved in 100 minutes!
  2. Sky_Maths
  3. G2Esports
  4. boboquack
  5. ac_de_taffy
  6. Jack.YT
  7. Alex2184
  8. MrPizza
  9. priyanshu.p
  10. CC_cccc

We hope you all enjoyed the round!

Want more of Penchick?

Full text and comments »

  • Vote: I like it
  • +537
  • Vote: I do not like it

By pwned, 8 months ago, In English

Hey everyone, I'll be streaming my informatics training on my PHCuber YouTube channel! Here, I'll practice using ThemeCPs, which are two-hour mock contests with four problems. I've done many such practice contests in the past, and I hope that sharing my problem-solving method from a first-person perspective could benefit your competitive programming journey!

My 22nd stream (held on 10/13/24) can be seen here so that you know what you're expecting! https://www.youtube.com/watch?v=CvCjhMRWmhc

I'll be streaming as time permits, mainly in the evening for GMT+8 (China / Philippine time), which is around noon / early afternoon in GMT.

Once again, I hope you enjoy my streams and find them beneficial! I've noticed a lack of yellow-rated coders on YouTube, and I hope to fill that gap! Perhaps I'll make a blog in the future detailing what ThemeCP is and how it can supplement your informatics training.

See you in my future streams! Don't forget to like and subscribe so you don't miss any of them ^^

Full text and comments »

  • Vote: I like it
  • +107
  • Vote: I do not like it

By pwned, 9 months ago, In English

TL;DR: Participants who registered while yellow but who dropped to purple must be official participants.

Dear CF community,

Today was supposed to be a great day. After resting from an hour-long leisurely walk around the city, I went to Codeforces to compete in Codeforces Round 931 (Div. 2). Problems A and B went smoothly, as expected. Then, an "Accepted" submission problem C followed suit. As I glanced at the right side panel of the "Problems" page, the minuscule number of solves accompanied by a two-digit count of C-solvers pushed me to continue this winning streak. To my surprise, I got D1. Then D2.

I was convinced that it would be a good day. After a brief saunter for snacks, I returned to my desk and checked the standings, expecting a top 50 finish, which would be my new personal best for a Div. 2 round.

Ranks 1 to 20 loaded onto my screen. "Hmm, was I in the top 20?" I questioned. Nope, not in the first ten nor the first fifteen. My username was nowhere to be found in the official standings. Puzzled, I checked the full standings. There, I found my username pwned, beautifully purple as it had been for existence until a transient blip of yellow, with one small detail that would change the trajectory of my day -- a tiny asterisk (*), signifying that I was joining out-of-contest.

There, it dawned on me: I registered for the competition as a yellow-rated coder before falling back to purple in the contest merely 24 hours ago (Codeforces Round 930 (Div. 1)). Was my happiness dampened for today? Certainly. Today's round would've been my best performance by a magnitude, nearing a top-20 finish among official participants.

Now, don't you think that Codeforces needs to more adequately verify who exactly are the official participants in a round? Consider the inverse of my scenario -- a purple turning red in a recent round and joining a Div. 2 as an official participant. The community would echo with complaints on injustice. And I believe the community would resonate with me, an eligible participant who just happened to have registered for the Div. 2 round a few hours early.

Consider your fellow competitive programmer who trains hard every day. He enjoys learning new algorithms and building his skills on existing ones, just as you do. He was excited to put his hard work to the test and performed superbly. But his codes were nowhere to be found, lost in the sea of unofficial red participants.

To MikeMirzayanov and the Codeforces developers, I trust that you would intervene in this discrimination against color-shifting participants. I have absolute trust in your leadership, as in this community, fairness always simmers to the surface, regardless of how long it takes, showing its radiance.

To you, voicing your support would push Codeforces toward a fairer future. Change comes from social pressure. It begins with a single blog post and spreads with your constructive comments.

Full text and comments »

  • Vote: I like it
  • +190
  • Vote: I do not like it

By pwned, 22 months ago, In English

Dear MikeMirzayanov,

Although you want the round to be rated, I, pwned, believe the contest should remain unrated.

Making the round rated would be unfair. For instance, participants who blatantly copied the code for F would have a massive advantage. Problem F was worth a staggering 3250 points at the beginning of the round, outweighing the entirety of ABC! Meanwhile, participants who got the first four problems would have their positive delta stolen. At the extreme end, the users who focused on problem F, thinking it is simple, will have an even more pronounced disadvantage. Consider those who skipped D to look at F. These users hastily scribbled on their scratch papers, trying to find a swift solution. They would soon discover that they were attempting a 3100-rated monstrosity!

Codeforces should not use an author's intentions to decide whether a round must be rated. Instead, we must view the situation from a participant's perspective. An unsuspecting participant joins another Codeforces round, believing it would be another high-quality round that CF routinely delivers. Halfway through the contest, something was off — after he finished problems A, B, and C, he found that F had more solves than D! Was the last problem exceedingly simple? Was it copied? Was it stolen? A rule-abiding user would not check the forums. He would never know why so many users had solved F until the round ended.

Indeed, the author's conscience plays a part in his judgment by the community. Back in Codeforces Round 810 (Div. 2), Setter zxyoi admitted that he lifted a problem in the Codeforces Round #810 — he was admonished and downvoted to oblivion (rightfully so). Consider a moral dilemma: If I were an author who copied a problem, would I apologize to the community and face backlash, or would I stay in the shadows, waiting for the community's caprice to dissipate?

I am well aware that many among us support the round as rated. Yes, writers unaware of the coincidence are not to blame. Yes, the coordinators, who may not remember all 8500 problems from the archive, are not to blame.

And yes, the people who spilled that similar problem that would make or break a participant's entire performance are to blame. However, there is a solution — disable posting and commenting during the contest. We relegate such unfairness to the shadow realm, the cheating servers, and the QQ groups. But problem 765F, the duplicate of F today, had already been floating around before the blogposts were blocked. Codeforces, we can do better by banning whatever Web 2.0 activities during the round. Then, we would not have to deal with this messy situation in the first place!

Mike, you are the founder of Codeforces. We look up to you. Please listen to us, just as a benevolent dictator would listen to the voices of his citizens. You created the voting system, letting users express their feelings on topics. You enabled polls, allowing our expressions of approval or disapproval. Now, in this crucial moment where the quality of CF contests is on the line, please listen to us. We do not want mediocrity to seep. We do not want a platform where repeated problems are not a cause for concern.

Therefore, my humble opinion on the best course of action is to make this round unrated and have stricter regulations for future contests. Codeforces must ban users from creating posts and comments in the time frame — such posts can wait for the competition to end. This way, we can preserve Codeforces' status as the world's leading informatics platform and protect the integrity of its competition.

Full text and comments »

  • Vote: I like it
  • +395
  • Vote: I do not like it

By pwned, history, 2 years ago, In English

Hi all! What will happen if someone promotes to Div. 1 only (2100+) then joins a Div. 2 contest (< 2100) before ratings are updated? Has anyone experienced this yet?

I'm really wondering what will happen in two days as there will be two consecutive competitions — perhaps we will see by then!

Full text and comments »

  • Vote: I like it
  • +36
  • Vote: I do not like it

By pwned, 2 years ago, In English

Hi everyone! I've noticed that the difficulty of Div2As has slightly increased. In my opinion, this creates a skewed result, as people who intend to join may not be able to solve the first problem. Then, they may end up leaving without submitting anything. As a result, the difficulty rating of Div2As largely depends on the number of fakesolves; i.e. those who fail main tests or end up FSTing.

A harder Div2A also gives a slight disadvantage to those who join and only get A, as the pool of people competing are the ones who are more likely to solve A.

In addition, a hard Div2A scares lower rated coders away from Div2, which shouldn't be the case as the competition is also for them.

Therefore, I humbly suggest problemsetters to make simpler Div2As for more inclusive participation.

Full text and comments »

  • Vote: I like it
  • +429
  • Vote: I do not like it

By pwned, 2 years ago, In English

Good day! Is there a way to find problems containing a certain phrase, such as "easy version" or "hard version"? This would be a great addition, and it doesn't seem to be too difficult :D

Full text and comments »

  • Vote: I like it
  • +8
  • Vote: I do not like it

By pwned, history, 3 years ago, In English

Hi everyone! I noticed a contest called "Go Study Round 1 (Div. 1 + Div. 2)" in the contests page. Does anyone have an idea as to what it is and if it will become a new contest series? I'm hyped for a new contest series :D

EDIT: Seems like they're Putin' it on hold :P

Full text and comments »

  • Vote: I like it
  • +116
  • Vote: I do not like it

By pwned, history, 3 years ago, In English

Hi everyone! What do you think about adding a space to enter the page index in places like the rating standings and previous submissions? Currently, all we have is "1 2 3 ... 499 500", and I think that it would be better if we can have "1 2 3 [input number] 499 500". This feature is found in Discord, and it would be great if it were to be implemented in Codeforces.

If you have any more ideas, comment them down below, and please upvote this post so that MikeMirzayanov can see this!

Full text and comments »

  • Vote: I like it
  • +7
  • Vote: I do not like it

By pwned, history, 3 years ago, In English

Hi everyone! What do you think about adding a "performance rating" after a competition? This feature is implemented in AtCoder. I think that it would be a great idea to be able to see at what level we performed in our previous contests! For example, say that if you have a rating of 2000 before a contest and a rating of 2050 after, then your performance would be at around 2200 :)

If you have any more ideas, comment them down below, and please upvote this post so that MikeMirzayanov can see this!

Full text and comments »

  • Vote: I like it
  • +70
  • Vote: I do not like it

By pwned, history, 4 years ago, In English

Hi everyone! What do you think about adding a percentile metric to the ranking? For example, I think that it would be a great idea for us to be able to see our highest percentile when sorting our previous contests, not just our highest rank :)

If you have any more ideas, comment them down below, and please upvote this post so that MikeMirzayanov can see this!

Full text and comments »

  • Vote: I like it
  • +28
  • Vote: I do not like it