Hi! I’ve just recently migrated from CodeForces to CodeChef and I have to say that I was very pleasantly surprised by the quality of problems on here.
I’ve seen many people complain about the quality of problems (but those posts are from a few years ago) and I guess the times have changed. TBH when I started using CodeChef I’ve experienced myself finding problems interesting for the first time in a few months. Although I’m not that good of a competitor on CodeForces, I’m a mid expert there, so not too high nor too low to discuss A-E problems.
Yes, there are some issues such as cheating in Longs, but even though I’m still waiting for Long to end to upsolve, I must say this month’s contest has some very decent problems!
What’s I Don’t Like About CodeForces?
Too easy problems
To explain what I mean by boring problems - in CodeForces I’ve come to expect an extremely simple A which consists of printing either some math formula, checking whether a number is even or odd or just counting letters of a string. That’s ok, but takes me just about 20-30 seconds to think of a solution and another 20-30 seconds to code.
Following A is a trivial implementation problem, in which we should find unique elements/split array in different parts/count occurences or even just literally implement what the tasks says. This is dull and boring nature of CF A and B problems, but still I guess it’s not that big of a deal.
On the other hand you’d expect C to be an interesting problem, requiring some thinking. But no, you’re wrong. In most problems you’re just required to sort an array or do some prefix sums, perhaps I’m exaggarating but there were just 2-3 problems in the last 10 Div2 rounds I’ve found interesting and didn’t solve in 10-15 minutes.
Situation with D is slightly different as there’s been some extremely good D’s, more than a few actually, but also some crap such as the last round’s D, first few round starting with #70X had some of the worst problems I’ve seen in a long time. The round #711 was an example of a good round, whereas #712 besides B promoted some exceptionally uninteresting problems.
Harder problems still got the quality
E’s are mostly of good quality and I can’t complain much. I can’t lie, I’ll enjoy probably about 8-9/10 E’s seen these days.
How about this - take a well-known problem and make it interactive? Sounds great, doesn’t it? Hell no - it’s a disaster. Practically all of the interactive problems (besides the #711 E) sucked in the recent rounds. I can’t believe somebody approved a local maximum in an array as a C… The story is similar for all the other problems, take some binary searching and you’re good to go. I guess it is ok sometimes, but don’t overdo it.
Unnecessarily hard problems
Some problemsetters believe that throwing a less-known algorithm or a data structure will improve algorithm. If it’s just about implementing it, I’m sorry but it won’t. There have been many good problems involving tries and also some problems that just require you to know how to use trie and you’ll solve it in no time. There haven’t been many problems like this in the recent rounds which is a good thing, but upsolving rounds from 5-6 months ago made me realize these appear as well.
Pushing ad-hoc too much
I know that many coordinators don’t want to accept trash problems (but from what I can tell they’ve accepted more than a dozen of pure rubbish), so they decide not to allow ds/algo problems which are too trivial if you understand the topics. I’m fine with that, but that doesn’t mean we should abandon DS and algorithms completely, and allow somebody with exceptional math skills and practically no knowledge of CP tricks to sovle 5/6 problems. This is to say - less constructive and less ad-hoc stuff, but I don’t mean to remove them completely. How about make 3-2 ratio of ad-hoc/algo?
How to improve?
CodeChef is the perfect example I could think of. The last few rounds had ad-hoc problems, but there were DSU, DP, Seg-Tree and qutie decent Math problems in them. Were the DS/algo problems too trivial - I don’t think so and the numbre say for themselves, were they too hard? Coming up with the solutions during contest was no easy task for sure, but reading the editorial and understanding it went smoothly, which is what I want to be heard. In tough CodeForces rounds it takes me sometimes even days to understand what the idea was and how somebody came up with a solution, what the intuition was and how to prove a statement. The easiest thing one could do is - the proof is left to the reader. Ok, but what if I can’t prove it after trying for hours?
I felt like these CC sets are getting more balanced day by day and I like it. I know there’s been a change in problemsetters, coordinators, editorialists, etc. and that’s the reason I’ve decided to give CC a go and I can proudly say it’s been an astonishing experience so far!
And lastly, I’d like to talk about editorials. I was more than impressed by the editorial quality on CodeChef, kudos to y’all folks! Every subproblem is perfectly explained, each statement is tediously proven, a few reference solutions are provided. What more to ask for? There are even pre-requisites listed!
This is not to say that CodeForces is a bad platform. What’s more I won’t be leaving it ever and it will always be a place for me to practice and compete, but I just wanted to use an opportunity to mark the things CodeChef is doing right that CodeForces could learn from.
I know that problemsetters and coordinators do their best and try to keep the communities satisfied and entertained by problems, so please - don’t take this as too harshly in any way, just consider it as a positive critique.