Hello Codeforces!
I am a author of a Codeforces contest, and recently, I became a coordinator for a Codeforces round as well. After those two rounds, there are a some problems arise when preparing a problem. Thinking about the solutions to these problems, I decided to gather them into a blog series. Hopefully, this series will be helpful to the future problem setters, or people who want to create problems in general.
I have finished the first part of this series. It aims to introduce the Polygon platform to the new problem setters, and guide them through the basic steps on creating a new problem from scratch. In the post, I have explained the concepts and practices that a problem setter need to know in order to use Polygon to prepare problems.
Here is the link to the blog post: Polygon.Codeforces Tutorial — A Guide to Problem Preparation [Part 1]
This is a personal blog. I don't post the content of it onto Codeforces, because I want to make things more official on my side, I can customize things, and the amount of content of this post is kinda not suitable for a normal Codeforces post.
Special thanks
I want to give special thanks to Nikolay KAN Kalinin for proofreading, as well as giving very wonderful comments and feedback! I think I could not go this far to make this blog post without him.
Shout out to MikeMirzayanov and the Codeforces team for making Polygon! There are still more and more features being added, even during the writing process of this post.
And thank you for reading this post!
Auto comment: topic has been updated by darkkcyan (previous revision, new revision, compare).
Thanks for the great blog! Just went through it, and it seems fairly detailed and I hope it would reduce the barrier to entry to Polygon for new problemsetters (and inform people about best practices), not necessarily only for people who prepare Codeforces contests.
I've been coordinating a few contests for my uni, and I will probably add this to the problemsetting guidelines that we have for our contests.
Not sure where to ask this, but does anyone know what is the best practice for reading integers in the range $$$[l_1,r_1] \cup [l_2,r_2]$$$? The only way I know how to do this is to read integers in $$$[l_1,r_2]$$$ then have a ugly
ensuref
to check that the value is not inside $$$(r_1,l_2)$$$.Would be cool if others can share random polygon tricks too since we are on this topic.
edit: I remember awoo told me that you can speedup polygon package generation magically by going into the invocation where the package is running
Why is
ensuref
ugly? It's needed all the time for non-trivial checks like "distinct elements" or "the graph is connected".I would read a value from 1 to INF, and do
ensuref((l1 <= x && x <= r1) || (l2 <= x && x <= r2), ...)
.Thank you very much for the work you have done. It is great!