[Educational] Combinatorics Study Notes (3)

Revision en1, by Black_Fate, 2022-12-31 17:38:05

Hello Codeforces!

Today I'll be writing about what I have learnt about combinatorics, which played, and, in my opinion, will still be playing an important role in both Codeforces and CP (short for competitive programming).

However, combinatorics is such a great subject that made that impossible for me to write it all in one blog. So, this is just the second blog, which is friendly to beginners. If you are interested, please, pay attention to this account and I'll give posts as series for a long term.

If you have found some mistakes in the text, or if you have some questions about the topic, please, leave a comment, and I'll check it weekly and reply. Also, if you find some grammar mistakes, a kind comment will be also welcomed.

Previous Blogs

Content

  1. Homework Tutorial
  2. Catalan Sequence
  3. Stirling Number
  4. Derangement
  5. Recurrence relation
  6. homework

Part 0 — Pre-knowledge

In order not to make this blog too long (it's already very long now xD), I won't explain these things anymore. You can find them on wikis or google them.

  • What Combinatorics (1)(2) mentioned.
  • CP basics.
  • Reading simple C++ code.

Part 1 — Homework Tutorial

Task A

The first task of it can be solved with two quick powers in $$$\mathcal O(\log{(n+k)})$$$ time.

The second task can be solved with combination initiation, $$$inv[i]$$$ initiation mentioned in Task C in $$$\mathcal O(n)$$$ time.

Task B

Let's define $$$z$$$ the number of the $$$0$$$s in the array, $$$p$$$ the number of the positive elements in the array, $$$m$$$ the number of the negative elements in the array.

When the product is $$$0$$$, we have to choose at least one $$$0$$$. You may find it difficult to solve it directly, let's reduce the invalid subsets' count, which contains no $$$0$$$. So the count is $$$2^{n-z}$$$. The whole count is $$$2^n$$$, the answer is $$$2^n-2^{n-z}$$$ which can be solved in $$$\mathcal O(\log n)$$$ time.

When the product is positive, we have to choose $$$2i$$$ negative numbers. So we can enumerate the count of the negative numbers and calculate the answer. Notice that $$$2i\in[0,n]$$$. First, we can choose any subset of the set of positive numbers. So the answer is:

$$$\sum_{i=0}^{2i\leq n}\binom{m}{2i}\times 2^{p}$$$

When the product is negative, we have to choose $$$2i+1$$$ negative numbers. So we can enumerate the count of the negative numbers and calculate the answer. Notice that $$$2i+1\in[0,n]$$$. First, we can choose any subset of the set of positive numbers. So the answer is:

$$$\sum_{i=0}^{2i+1\leq n}\binom{m}{2i+1}\times 2^{p}$$$

All above can be solved in $$$\mathcal O(n)$$$ time.

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en12 English Black_Fate 2023-01-03 14:06:34 17
en11 English Black_Fate 2023-01-03 08:57:40 9
en10 English Black_Fate 2023-01-01 18:25:05 108
en9 English Black_Fate 2023-01-01 14:03:13 0 (published)
en8 English Black_Fate 2023-01-01 14:02:32 1852
en7 English Black_Fate 2023-01-01 13:23:54 1546
en6 English Black_Fate 2022-12-31 19:22:40 1565
en5 English Black_Fate 2022-12-31 19:02:17 4
en4 English Black_Fate 2022-12-31 18:52:43 1538
en3 English Black_Fate 2022-12-31 18:30:27 853 Tiny change: 'f_3$$\n\n$\therefor' -> 'f_3$$\n\n$$\therefor'
en2 English Black_Fate 2022-12-31 18:11:54 3576 Tiny change: ';\n}\n~~~~\n\nSo' -> ';\n}\n~~~~~\n\nSo'
en1 English Black_Fate 2022-12-31 17:38:05 2851 Initial revision (saved to drafts)