This is my first post on CodeChef. Before anything else, I would like to request the authors of January Challenge not to take my words personally or as offense. Please go through the entire post (criticism is not always negative) because everyone who is professional now was amateur in the past.
Contest Link : JAN18
This month challenge has problems from varying topics including Suffix Structure, Mobius Algebra, Meet in-the Middle, Sum over Subset, Dynamic Programming and few ad-hoc. I really enjoyed the challenge specially because some of the topics being my favourite. Whenever I get a chance, I always tell juniors to participate in long challenges because one can learn a lot from them.It is clear to see why that is true. You have enough time to read new theories, implement, optimize, learn and also get some Laddus. I started my journey with OCT12, solving just two problems, and since then I have been taking part in long challenges - latest being JAN18.
Can contest problems can have issues? Yes, absolutely. If such issues keep happening, will the quality of such reputed contest remain intact ? I think no. January challenge has few issues that need to be addressed so that it do not repeat in future. Many have already discussed about them in other posts, I will summarize them, add my own thoughts and suggest some ideas. I request everyone else to take part by posting issues and constructive ideas to eliminate them.
Gradient of difficulty : Fifth most solved problem see more than 2.5K submissions and next problems sees only 141! Contest admin should take help from other member of problem setting panel to decide on the difficulty. Because many times what seems easy to you, may not be that easy to others and vice versa. Also difficulty can vary according to topic. For example, say I like expected value problems and I can solve them quickly most of the time. However, an ad-hoc / greedy problem which is easier than the expected value problem may ask me for some effort. Whereas, for others who are new into CP, may find the ad-hoc/greedy problem easier because of unfamiliarity with expected values.
Lazy Tester : A tester is supposed to write the correct (expected solution) and make sure that it passes on the test data. This is why you are called a tester - because you tested that a correct solution passes. Is it ? Absolutely No. That is just a small part of it. You job is to make sure that test data is strong enough. Write bruteforce, sub-optimal and some heuristic solutions and make sure none of them passes. Suggest corner cases to the author. Validate that constraints are followed and so on. I am not sure, whether a tester is paid for long challenges, but if you are, understand why you are paid. Participants also solve the same problems but they are not paid, so why should you be paid to do the same ?
Amatuer Authors : It is good to see so many new problem setters in long challenges - specially young Indian setters. You get to learn a lot when you work with experienced problem setters. At the same time, the experienced setters of the panel and specially the contest admin has responsibility to guide the newcomers. Believe me, a newcomer may be very awesome, bright and what not but there is something in experience that needs to be passed on. Familiarity with the new platform, Time Limit and may be other Platform dependent things are among must that needs to be passed on. Apart from that and most importantly, they need help in preparing strong testdata. They may try their best and claim that data is strong enough. But it is the duty of contest admin and tester to really verify it. In most cases claim will not be true. So, please help them.
Irresponsible Authors : If you author a problem, you need to prepare test data, test a valid solution. And submit it for contest. Is this all ? Absolutely No. Once the contest starts. Keep looking into (accepted) solutions as and when they come. Dig into it and see whether it is optimal, sub-optimal, expected, better, correct or anything else. If you spot a solution which should not pass, discuss with the admin and update the test data, put on rejudge. Also, you can learn a lot from the codes. People will submit many innovative heuristics and other kind of correct solutions which you might not have thought. Feel awesome Basically, you own that problem - it is upto you to maintain the quality, don’t be irresponsible.
KILLKTH Specific : This problem was awesome. However, author has been utterly negligent. I hope, he learnt from it. Looking forward to see more well prepared and beautiful problem from him. Test data contains only small queries. Look My Comment Here and here. Any kind of solution is passing. This is not acceptable even for amatuer author. Advice - when setting problems on platform such as CodeChef where you can not have many input files - go with multiple T testcases, unlike in this problem. And ensure that overall input file is within reasonable limit. Having a single testcase is not suitable at all for CodeChef. As a author write intuitive sub-optimal and make sure it does not pass.
XYHUMOQ Specific : Almost - bruteforce solution passes. My Almost Bruteforce Solution. Divide the string into two halves. For each possible flips on first half (at-most 2^15) find out number of subsequences of the form 1010…0 and 1010…1. Do same for second half. Now try to combine each from first to each from second. Total comparison 2^30. Which should time out for any testcase with string length 32 and k = 1 (or any other for which answer is NO). I had many optimizations on mind, but I submitted it without any just in case it passes. I generally do not do this, but did because attempting on the last day. As a author, you should think what can be a worst case. For this problem, when answer is No can constitute as Worst Case for solutions which are exhaustively searching for flip sequence. So you need to beat that.
CHEFPALS Challenge Problem : I have not attempted this problem. But looking at the comments of others, it is clear that this problem had issues initially. Even after they fixed, there are some issues. Three people got 100 points. And the next best one and others got very very few points compared to them. I have seen such marking scheme first time in long challenges. I should not write much about it as I have not attempted yet.
Also a note to participants, if you notice that testdata is weak, please inform the author / codechef about it. If the problem is detected earlier, it can be fixed. I generally would do, this time I attempted them on the last day hence could not.
Apart from all this, what do you guys think about partial score problems in long challenge ? I feel like there should be cap of max 20 percent for solving all/any sub-problems. At-least 80 percent should be reserved for the main task. Your opinion, with reason ? I will explain mine after a while.
Repeating, do take part in Long Challenges, they are awesome !
Thanks for reading!