This post was originally written on Codeforces; relevant discussion can be found here.

Firstly, the CF Catalog is a great feature that makes it much easier to learn topics by having a lot of educational content in the same place, so thanks MikeMirzayanov!

I was originally going to post this as a comment under the catalog announcement post, but it became too large for a single comment, and it will probably need some more discussion.

I want to suggest the following improvements for the catalog (and initiate a discussion on how best to tackle these issues with the current version):

  1. Multiple topics per post
  2. Blog submission for review

The reasons and detailed suggestions are as follows:

Multiple topics per post: Sometimes, a post might not fit into just one category at a time. For example, consider the following posts:

  1. This post fits into both combinatorics and trees.
  2. This post, even though it is in the NT section due to having a similarly named analog in NT, covers a wide range of combinatorial constructs.
  3. This post fits into both probability and strings.
  4. This post, even though it is in the geometry section due to solving problems using geometry, could have also been categorized by the applications it has.
  5. This post is not just a geometry post, it can be added to tools as well.
  6. This post is in the segment tree section because it has a faster implementation, but it should also be in the C++ section because it is specific to C++.
  7. This post is in the data structures section, but it should also be in some section that deals with permutations.
  8. This post is only in the DP section, but should also be in the segment tree section, to be educational for people who are learning segment tree.
  9. This post is correctly added into two sections, but the redundancy is a bit concerning.
  10. Recently, I was discussing about how to categorize this post, and there were 6 different suggestions among the currently existing topics — combinatorics, data structures, abstract nonsense, number theory, graphs and strings. As a result, despite being a collection of a lot of major ideas concerned with that topic, it is still not in the catalog. I wonder how to categorize posts that take a topic and try to collect some ideas around that topic. General idea based posts are currently categorized under a general section under algorithms, and they suffer from the same issue, but to a lesser extent because they are kind of global.

The current solution seems to be to just add duplicate entries in different section, but that is not done for most of the above posts (and might not be the first thought that comes to mind for a lot of people, who will probably settle for adding it into one section). My suggestion is using some sort of a community-assigned tag system (not the post tag system) for this task, where a single post can have multiple tags. This is similar to problem tags. Then, the filtering can be done by tags rather than displaying the whole tree at once.

Blog submission for review: The idea behind currently allowing only people whose maximum rating is \(\ge 2400\) is to avoid spam and vandalism in the catalog. However, I think it is not optimal for the following two reasons:

  1. This gives the (somewhat thankless) task of finding and adding content to the catalog only to higher rated people, who are few in number, and IMO it is better to make the “finding” part of this task a larger community-sourced initiative.
  2. Sometimes, they might miss a lot of posts that are good, or just because they have some issues like not being able to categorize the post correctly and the fact that post addition is publicly available, they might not want to make any mistakes and leave the addition of some post to some other red.

My suggested solution that fixes both of these is to add another stage before posts are added into the catalog. Sure, reds can directly add things to the catalog. The idea is to also allow people that are lower rated (but bounded below by, say, expert) to suggest additions to the catalog. Some kind of pull requests (implemented very simply as a simple blog suggestion with tags/topics) that can be viewed by people who can add stuff to the catalog should work this way.

This way, the issues are resolved as follows:

  1. Finding good content becomes more community-driven, and people who write educational posts can suggest their own posts, making the catalog more complete.
  2. If a red is unsure of which category to add a suggested post to, the suggested tags can help them make a decision.
  3. If a red is unsure of which category to add a post that they want to suggest, they can just suggest it as an addition to the catalog, and someone else can add it to the catalog.