Radewoosh's blog

By Radewoosh, 3 hours ago, In English

I don't feel like my attention-seeking senses are fulfilled with just comments, so I think it makes more sense to write a blog about it. Codeforces has evolved over the years and I think it might be a good move to talk about some relicts of the past that are still there, or even possibly do something about them. I'd like to note, that it's possible that there've been some blogs about this topic from the admins and I've missed them and lack information because of that. In this case, please pardon me.

After the first two Spectral::Cup rounds I've commented on things that in my opinion are somehow harmful.

The first comment was this one. It was mostly about the solution being judged twice on the same tests. I'm not much against it, as it seems to be well defined in theory: you have to pass both times to get AC (where the second time it might include extra tests), which is fine — not perfect, but ok, rules are rules. But from what appears here (or at least from what I understand), this guy's solution got rejudged after it got TLE on the second (system) testing. For me seeing that my solution passed the pretests means nothing definitive (mostly because of possible extra systests, that will be touched more in the next paragraph), but apparently that's not the case for everybody and maybe it's bad of me to not follow what I'm observing about recent contests.

The second comment was this one. This one is less about something being unfair in a direct way, but rather about hurtful conventions/assumptions. During this contest having the knowledge that systests are not going to contain any additional tests (except for possibly unexpected hacks) would get me a better place -- but seeing no announcement that in some problems the pretests are equal to systests (which appeared multiple times if I'm not mistaken) I've assumed that I can't assume so and resubmitted the code (I think that both version of the code are actually correct if you make some extra observations, but the discussion is about decision making). And that would be totally fine, but I kind of think that this assumption is actually correct nowadays and systests are actually supposed to be equal to pretests and that people who assume so are ahead of others (because of being less likely, or even fully unlikely to resubmit).

I kind of imagine the Codeforces team to try to be nice to users and therefore contain as much tests in the pretests as possible, but because it totally wasn't the case some years ago, it's hard for me to just assume so without seeing any clarifications. I also assume that the rejudge of the solution from the previous paragraph happened because of cf team wanting to be kind, but that couldn't happen if pretests wouldn't be equal to systests, right? So if pretests = systests is really such a "rule" right now -- why not come clear about it? Otherwise it favors people who make unspecified assumptions, or even worse, people who are close with cf team and possibly got a (in theory) not very meaningful bit of information like "yeah, we usually just set systests=pretests nowadays" or something like that.

As I'm already writing this blog, I think it might also make sense to remind about another Codeforces' bad choice, that I think is still there (I might be mistaken though and maybe it got fixed). This one is a pure choice and if wanted might stay here, but I still think that's the worst option out of three -- to come clear, by a pure coincidence, it's something that also have stripped me out of a better place (and even a victory) some years ago, but I don't think that that's that crucial, as it probably influenced the results multiple other times as well, including ones beneficial to me or the opposite. It's about whether a submission which fails on sample tests should get a penalty or not. Assigning a penalty would obviously make sense as I think on most other competitions this is the case and it just works. Not assigning a penalty is also a right (and I guess preferable) choice as Codeforces wants to be nice and from what people were saying, it's possible to submit a wrong code/to a wrong problem or format the output incorrectly or something -- this makes sense, as then the problemsetters might try to "catch" such solutions and prevent them from getting a penalty, and I totally support this option and I think it should be the active one. So it turns out, that there is also a third option, which I don't really understand, but it turns out to be the active one -- to not assign the penalty only if the solution fails on the first test, no matter how many tests are marked as samples. For me, this is clearly because it was just implemented this way temporarily and not fixed later. In this setting it obviously contradicts with the idea of problemsetters being able to detect the wrong formatting for example -- imagine two samples, one with answer YES and second with answer NO -- it depends on the pure randomness whether spelling each of those incorrectly results in a penalty (yes, I know that most times outputting something like "yEs" is also accepted, just try to stretch the example a bit if you need it). I can also obviously imagine cases where it wouldn't save someone from getting a penalty when submitting a wrong file -- I imagine a problem with the output on the first sample is "0" and the next samples have more complex outputs -- it could be rare, but I'd assume there is a non-zero number of such problems and I totally imagine the wrong code outputting "0" just because. So again, not assigning the penalty for failing any of the samples seem strictly better to me?

I also know that in theory requiring extra work from the CF team wouldn't be super nice, but in the past I learned that they are super responsive about some stuff -- for example I remember preparing a round and saying something about the polygon and it got fixed/improved within a day or so. I also assume that Codeforces is very much a site "from competitive programmers for competitive programmers", so I don't think that mentioning MikeMirzayanov and KAN and inviting them to the discussion is something bad. I'm also doing so because I really think that some things are simply a bit dusty and talking about them might make sense and improve the platform.

Thank you for your attention, good night.

UPD: I forgot to mention something. I understand that not clarifying whether the pretests are equal to systests is somehow "comfortable" for admins/problemsetters, but I think that the biggest usage of that fact (that I'm aware of) happened at this one round (it was a couple of years ago) when one of the problems had deterministic model solution, but it was possible to come up with non-deterministic one and I think that only I and one other guy somewhere down the standings did it this way? And for the systest phase, the problemsetters added like 700 extra tests to test against such solution and if I'm not mistaken I've won this round, so that definitely felt like a personal attack on me. So I'd say that the biggest usage of the comfortableness should've not really happened and rolling with whatever the state of the systests is is the way to go (except for saying that all unexpected hacks will be added for example).

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