I've been noticing that some of the 'easiest' problems in CF rounds not to be actually easy for beginners. Indeed, most of these problems:
- Become really trivial once you notice how to destroy the problem.
- Require one line of input, and one line of output (probably one or two
if
s?), thus take <30s to code.
But in fact, to destory them, you need to be in a much advanced level. For beginners, it's really hard to ever come up with an idea to look the problem in a different way other than how it pretends to look like. So, for advanced programmers it's typical 1 min-solve problem (because the required code is so short), but for the real target audience it's just a real hard problem. Not because they don't know how to code 2 lines for input and output, but because they can't even start coding.
I think these problems should be more in a way that anyone can solve with enough time invested in them. They can really require more implementation than just input and output (because this is a programming contest), but in every way I think the solution should be more straightforward and be easily found just by reading the description carefully.
How are your opinions? Please leave a comment below.
I think the solutions are usually quite straightforward... today's A was nice. And I think that 90% of the time anyone can solve them with enough time (again, today's A can probably be solved by generic elementary school student or at the worst middle school student). Certainly it should not be reduced to "Implement X" like in some introductory programming class.
I think the problems which are generally considered "bad div2/3 A" are instead the problems which are straightforward implementation...
Can you give an example of the problems which you say are 1 min solves for advanced programmers but "can't even start coding / solve within contest" for noobs?
Today's A wasn't one of the hardest problems, but still he problem requires some clever idea. I saw many people struggled with it (even cyan and some blue people). It's easy if you're used to such problems, but it's not easy for beginners to start out by thinking that the answer might be only small. The problem also tried to hide easy solutions by complicating explanations, like how the note elaborates the way to make the answer for the 3rd case. And as a result, we can see around 1300 participants out of 14k couldn't solve it, although we should consider some Div. 1 people who only tried harder problems.
I don't mean straightforward implementation problems are good; more like I mean problems that require easy observation and reasonable implementation are more proper for 2A. I think problem A from my last round https://mirror.codeforces.com/contest/1453/problem/A is a good example for such problems.
I may be a bit out of date since I've only recently came back to contests after 1+ year, but yeah this is not the first time I felt this. Not saying that majority of these problems are hard, but I do see them occasionally.
I admit the observation for today's A is not as easy as the observation for your A, but I still think it is easy enough, and I will still assert that an average elementary/middle schooler can solve it in an hour.
I think a better metric is people who solved nothing, to avoid "div1 user just trying F". At this metric only ~550 people failed to solve in the recent contest. I realized that precision errors can impact people who are not familiar with doubles in programming (for this reason I now think the problem is not that great), but I looked through most of the failure submits and they are just plain wrong (printing x%2 + y%2, printing sample cases, improperly checking if number is a square, not even passing sample case).
I just can't see how this problem could stump anyone who is not a complete beginner to thinking.
Today's A isn't really a good example for my argument I guess... I'm probably too lazy to actually provide what seemed to be the hardest ones but there were many times I thought "yeah, this problem is super easy for me, but rip beginners"
Anyways this blog is mostly based on what I had experienced more than a year ago so probably it may have changed. Just my 2 cents.
In educational contests we used to see more implementation based problem than in other constests. But the last one educational contest was different, because A,B,C are not implementation based, but needed an observation to find the fairly simple implementation.
I have tested some CodeChef Starters (Rated for CC Div2/3/4). I'm trying to author one.
Do you know which problems are hardest to come up with? Cakewalks (First 2 problems of Div3)
So far I have proposed 6 cakewalks and 5 of them were mercilessly rejected by admin aka coordinator. One needs 4 cakewalks for a starter (4 for Div4 and 2 for Div3).
Either this no would keep on increasing or I would give up creating cakewalks for the contest.
The most difficult job for CodeChef Starters Admin is to find good cakewalks, compared to harder problems of the problemset.
Around $$$20$$$ problems A have been proposed for Codeforces Round 778 (Div. 1 + Div. 2, based on Technocup 2022 Final Round). Most of them were rejected because they were either too difficult or too contrived. $$$4$$$ days before the contest, we still didn't have a decent A, so we chose the lesser evil.
better solution: beg your coordinator to set d2A for you \s
I think the core of CP is the idea, not the implementation. In Chinese, we usually call Competitive Programming as Algorithm Competition, because the most important thing in CP is to design an algorithm, not to implement it. So I think these 'easiest problems' made a good demonstration. They are suitable.
Somehow my words seem to sound like that these problems should be implementation-based -- that's not my intended point. I agree that they shouldn't be straight up "implement X" problems because these problems don't contribute to their skills much. My focus is that they're not actually as easy as they may seem to advanced participants who can solve them in really short time because there's barely anything to implement. Top participants solving in short time make these problems look easy while on the bottom there are many newbies who struggle to come up with the idea for the easiest problem but can't.
So when we measure the difficulty of these problems, the criteria for that shouldn't be "how short is the required code?", but rather be "is the idea easy to come up with for people who just started?"