Pancake's blog

By Pancake, history, 7 years ago, In English

So, after four years of non-participation on Codeforces, I recently did three contests in a row and managed to drop a whole color (in part because of being out of practice and in part because of not treating the contests seriously). In fact, I was never dedicated enough for competitive programming (in terms of time/effort/methodology), for a number of reasons, but here's one issue that I'd like to survey fellow competitive programmers about: what is your favorite contest format, and why? Below is my personal view. (This may have been discussed previously, but it's always nice to become acquainted with new/recent opinions).

  • OI style (IOI & national olympiads): this is by far my personal favorite. First of all, I'm not a fan of team competitions since I like to have a quantifiable measure of my own performance. Furthermore, scoring does not depend on the time that is taken to solve a (sub)problem. This has several benefits. For one thing, it prevents irritating factors from playing a role, such as rushing to submit a solution (say, based on a greedy approach) without being sure about its correctness in order to score higher. The subtasks thing (with full feedback) is also quite a neat feature and means there is something for everyone (unlike Codeforces contest where it's not unlikely that most people only manage to do 0, 1 or 2 problems). This allows for a nice score distribution and is obviously more meaningful than ranking participants based on time. The absence of penalties for non-AC solutions is not something I'm particularly fond of.

  • ACM-ICPC style: penalties are there, so that's a plus point. Time-based ranking is a minus. Feedback is also present. As said, no fan of team competitions. Since the number of problems on the problem set is usually high, the "something for everyone" part is also available (in a balanced problem set, at least).

  • Codeforces/TopCoder: usually, there are only pretests during the rounds, and the balance of difficulty is not that great. Additionally, while I know that hacks/challenges add to the fun for some participants, I don't particularly enjoy them (granted, because I'm not good at them, but that's only a semi-reason; I believe that they, like time-based ranking, make the contests unnecessarily too competitive). In fact, I would advocate enabling contestants to opt to participate in "anonymous" mode; you could still participate, but your rating changes/color/submitted code would only be visible to you. Again, I'm aware that this is not "fun" for many competitive programmers, but it's just an option that would ensure that some users aren't too discouraged.

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

»
7 years ago, # |
Rev. 3   Vote: I like it 0 Vote: I do not like it

I like OI style. I like the absence of spam-submit penalty, absence of time penalty, and presence of batches. I think the user should know everything.

Or better yet, points for every test case passed.

»
7 years ago, # |
  Vote: I like it 0 Vote: I do not like it

If OI does not have penalties for non-AC and no time penalties, how are ties broken? I am very familiar with ICPC and Codeforces style contests, but I have not really heard of that first type you described.

»
7 years ago, # |
  Vote: I like it 0 Vote: I do not like it

I like old IOI style, i.e. no feedback. It is some kind of penalty for non-AC solution (sometimes very huge) but it's a penalty that doesn't depend on time. The old IOI style is also the closest to real life problems — you are given some tasks and can't look up which is the easiest. You also won't know that you wrote something bad until it's too late (at IOI it means bad score, in reality it means your app crashed when your client needed it to work) so you need to test it very well.

I also like atcoder/csacademy style. It doesn't matter when you solve problems, only the total time to solve counts. Some small plus is also that the problems have different values. And I actually like the dynamic scoring on csacademy.

»
7 years ago, # |
  Vote: I like it +3 Vote: I do not like it

Nice topic, it's interesting how practically every competitive programming platform has different rules.

In my opinion the best combination of rules are as follows:

  • Individual, since I want my performance to reflect my skill level

  • Time penalty. You really can't judge two contestants equally if they solved the same problem but one was 2x faster.

  • Full feedback. I've always thought codeforces/topcoder are way too harsh when you know how to solve the problem but have one little bug or forget to handle one case and then you lose everything.

  • Dynamic problem scoring because too often the authors misjudge the difficulty

So basically csacademy's rules are perfect. :)