Welcome to the world of competitive programming, where we'll explore the ABCs of Combinatorics - a fancy term for counting and arranging things. Think of it like solving puzzles with numbers and patterns. In this article, we're diving into the Basics of Combinatorics that every competitive programmer needs to know. We'll learn how to count, arrange, and select things in clever ways. These skills are like secret weapons for solving problems quickly and efficiently. So, get ready to boost your problem-solving game with the magic of Combinatorics!
What is Combinatorics?
Combinatorics is a branch of mathematics that focuses on counting, arranging, and analyzing discrete objects and structures. It deals with the study of different ways to select, arrange, and combine elements from finite sets or sequences, often in the context of discrete and finite structures. Combinatorics encompasses a wide range of topic.
Basic Rules of Combinatorics:
1. The Sum Rule:
If we have A number of ways of doing Task1 and B number of ways of doing Task2 then the total number of ways to choose one of the Task is equals to A+B.
So generally, if there are N tasks and i'th task can be done in a[i] ways then there are a1+ a2+ a3+... an ways to do one of the tasks.
Example:
Imagine you have 3 different Hats, 2 different shirts and 4 different pants. If you want to donate any one of the item what are the total number of ways to do say?
Answer: 3 + 2 + 4 = 9
2. The Product Rule:
If we have A number of ways of doing Task1 and B number of ways of doing Task2 then the total number of ways of doing both the tasks is equal to A*B.
So generally, if there are N tasks and i'th task can be done in a[i] ways then there are a1* a2* a3*... an ways to do all the task.
Example: Imagine you have 3 different Hats, 2 different shirts and 4 different pants. You want to get dressed and for that you have to wear 1 hat, 1 shirt and 1 pant. In how many ways you can do so?
Solution: 3 * 2 * 4 = 24
Fundamental Concepts in Combinatorics
Here, we'r going to introduce you to several fundamental concepts in combinatorics that is very useful:
The main use of factorial is counting the number of permutations (number of ways of arranging some objects). It can be used to answer following types of questions:
- Question 1. A class has just 3 seats vacant. Three people P, A, and R arrive at the same time. In how many ways can P, A, and R be arranged on those 3 vacant seats?
- Question 2. Find the number of ways of arranging 5 people if 2 of them always sit together?
- Question 3. Find all the three-letter words beginning and ending with a vowel. Given that repetition of alphabets is not allowed.
- click here to view how to use factorial in order to solve.
In permutation, we primarily deal with four kinds of problems.
A. Permutation with repetition:
Question: How many 3-digit numbers greater than 500 can be formed using 3, 4, 5, and 7?
Solution: Since a three-digit number, greater than 500 will have either 5 or 7 at its hundredth place, we have 2 choices for this place. There is no restriction on repetition of the digits, hence for the remaining 2 digits we have 4 choices each. So the total permutations are: 2 × 4 × 4 = 32
B. Permutation without repetition:
Question: How many 3-digit numbers divisible by 3 can be formed using digits 2, 4, 6, and 8 without repetition?
Solution: For a number to be divisible by 3, the sum of it digits must be divisible by 3
From the given set, various arrangements like 444 can be formed but since repetition isn’t allowed we won’t be considering them.
We are left with just 2 cases i.e. 2, 4, 6 and 4, 6, 8
The number of arrangements are 3! in each case
Hence the total number of permutations are: 3! + 3! = 12
C. r - permutation without repetition:
This is when we arrange just r objects out of n objects without repetition.
Question: An ice-cream shop has 10 flavors of ice cream. Find the number of ways of preparing an ice cream cone with any 3 different flavors?
Solution: Let us consider n = 10 (total number of flavors) and r = 3 (number of different flavors needed)
For first flavor we have 10 choices
For second flavor we have 10 - 1 choices
For third flavor we have 10 - 2 choices and this is same as (n - r + 1)
The numbers of arrangement would be: 10 × (10 - 1) × (10 - 3 + 1) = 720
From this we can generalize that, the number of ways of arranging r objects out of n different objects is:
n × (n - 1)  . . . (n - r + 1) = nPr
D. r- permutation with repetition:
This can be thought of as the distribution of n objects into r boxes where the repetition of objects is allowed, and any box can hold any number of objects.
Question: A police officer visits the crime scene 3 times a week for investigation. Find the number of ways to schedule his visit if there is no restriction on the number of visits per day?
Solution: The number of ways to schedule first visit is 7 (any of the 7 days)
The number of ways to schedule second visit is 7 (any of the 7 days)
The number of ways to schedule third visit is 7 (any of the 7 days)
Hence, the number of ways to schedule first and second and third visit is 7 × 7 × 7 = 73 = 343
A combination of a set of distinct objects is just a count of the number of ways a specific number of elements can be selected from a set of a certain size. The order of elements does not matter in a combination.Â
An unordered selection of r elements from a set is called an r-combination. It is represented as C(n,r)
Since a combination is just a permutation without order, the number of r-combination can be expressed in terms of r-permutation.Â
The r-permutation can be obtained by first obtaining the r-combination and then ordering the elements in each r-combination, which can be done in P(r, r) ways.Â

which gives us:

Question: From a class of 30 students, 4 are to be chosen for the competition. In how many ways can they be chosen?
Solution: Total students = n = 30
Number of students to be chosen = r = 4
Hence, Total number of ways 4 students out of 30 can be chosen is,
                        30C4 = (30 × 29 × 28 x 27)/ (4 × 3 × 2 × 1)
                           = 657720/ 24
                           = 27405 ways
Question: Given two integers n and m, your task is to calculate the number of arrays such that below 4 conditions are satisfied:
- Size of array must be n
- All array element must be from 1 to m;
- For each array, there is exactly one pair of duplicate elements
- For each array there exists an i such that array is strictly increasing before i'th index and strictly decreasing after the i'th element.
Example: n=3, m=4
Output: 6
Explanation: [1,2,1], [1,3,1], [1,4,1], [2,3,2], [2,4,2], [3,4,3] are the arrays that satisfy the conditions.
Solution using combinatorics: Using condition 1 and 3, there will be exactly n-1 distinct elements in the array which is equal to \binom{m}{n-1}
Now we should have exactly one element that appears twice and we can choose from n-1 elements, but we cannot choose the maximum element because it will contradict our 4th condition. So, multiply our answer by (n-2)
finally, some elements will appear earlier than the maximum in our array, and some — later. The duplicated element will appear on both sides, but all other elements should appear either to the left or to the right, so there are 2^{n-3}
  ways to choose their positions.
Thus, the final answer is \binom{m}{n-1}*(n-2)*2^{n-3}
A binomial coefficient C(n, k) can be defined as the coefficient of x^k in the expansion of (1 + x)^n. A binomial coefficient C(n, k) also gives the number of ways, disregarding order, that k objects can be chosen from among n objects more formally, the number of k-element subsets (or k-combinations) of a n-element set.
Formally, let x and y be variables and n be a non-negative integer. ThenÂ

Sometimes the required calculation may seem difficult to formulate, but using inclusion-exclusion with combinatorics we can calculate the required solution by Excluding the non-required solution from the total number of solutions. Let’s understand this with example:
Example 1: Count of permutations of numbers [0,9] such that first element is greater than 1 and last element is smaller than 8.
Solution using Inclusion Exclusion: We can revert the problem using the principle such that instead of calculating the original problem we can do the following:
- Count of permutations of numbers [0,9] such that first element is smaller than equal to 1 and last element is greater than equal to 8
- Subtract the Count of Step 1, from the total number of permutations possible.
Let X= set of permutations in which the first element is <=1 : 2*9 !
Let Y= set of permutations in which the last element is >=8 : 2*9!
Then X\bigcap Y = 2* 2 * 8 !
Then by Inclusion Exclusion Principle:
X\bigcup Y= X + Y – X\bigcap Y
=Â 2*9! + 2*9! - 2*2*8!
Subtract this count from the total number of permutations i.e. 10! to get the answer of the problem.
Example 2: Count how many subsequences of length ‘N’ exists consisting of only characters ‘a’, ‘b’ and ‘c’ such that each character occurs at least once.
Solution using Inclusion Exclusion: Again, we can change the framing of question such that we can calculate the count of such subsequences where ‘a’, ‘b’ and ‘c’ does not occur at all and subtract this count from the total number of the subsequences possible (3^n)
Let A = number of subsequences where ‘a’ does not occur
Let B = number of subsequences where ‘b’ does not occur
Let C = number of subsequences where ‘c’ does not occur
Then using Inclusion-Exclusion Principle:

which can be simplified to, 
Subtract this count from total number of subsequence possible i.e 3^n to get the answer.
If you have more pigeons than pigeonholes into which you want to distribute those pigeons, at least one pigeonhole must contain more than one pigeon.
In other words, if you have n objects and m containers, where n > m, then at least one of the m containers must contain more than one object. This principle is named after the analogy of pigeons (objects) being placed in pigeonholes (containers).

Practice Problems on Combinatorics:
Problem
| Practice
|
---|
Perfect Sum Problem
| Solve
|
---|
Combination Sum
| Solve
|
---|
Permutations of a given string
| Solve
|
---|
Subsets with XOR value
| Solve
|
---|
nCr mod M | Part 1
| Solve
|
---|
Combination Sum II
| Solve
|
---|
Combination Sum III
| Solve
|
---|
nPr
| Solve
|
---|
Calculate the coefficient
| Solve
|
---|
Maximum Sum Combination
| Solve
|
---|
Related articles:
Similar Reads
Dynamic Programming or DP Dynamic Programming is an algorithmic technique with the following properties.It is mainly an optimization over plain recursion. Wherever we see a recursive solution that has repeated calls for the same inputs, we can optimize it using Dynamic Programming. The idea is to simply store the results of
3 min read
Practice For Cracking Any Coding Interview The coding questions in this article are difficulty-wise ordered. The idea of this post is to target two types of people.Competitive Programming Preparation (For Ist and IInd Year Students): It is recommended to finish all questions from all categories except possibly Linked List, Tree, and BST. How
11 min read
UGC NET Computer Science Syllabus 2024 PDF Download UGC NET is a competitive exam that is conducted by NTAs(National Testing Agency). Computer Science and Applications is one of the popular branches of UGC NET. In this article, we are going to discuss the syllabus of Computer Science and Applications and different terms related to Computer Science an
14 min read
Introduction to Flowcharts The flowcharts are simple visual tools that help us understand and represent processes very easily. They use shapes like arrows, rectangles, and diamonds to show steps and decisions clearly. If someone is making a project or explaining a complex task, flowcharts can make complex ideas easier to unde
5 min read
Program to print ASCII Value of a character Given a character, we need to print its ASCII value in C/C++/Java/Python. Examples : Input : a Output : 97 Input : DOutput : 68 Here are few methods in different programming languages to print ASCII value of a given character : Python code using ord function : ord() : It converts the given string o
4 min read
Cryptography Hash Functions Cryptographic hash functions are mathematical algorithms that transform input data into a fixed-length sequence of characters, referred to as a hash value. Cryptographic hash functions are intended to be fast, deterministic, and one-way, meaning that even a minor change in input yields a very differ
6 min read
C++ vs Java Java and C++ are the two most popular programming languages in the world. Both languages have their features and use cases. In this article, we will look at the major differences between C++ and Java. C++ vs Java The following table lists all the major differences between Java and C++ programming la
7 min read
Must Do Questions for Companies like TCS, CTS, HCL, IBM ⦠As the placement season is back so are we to help you ace the interview. We have selected some most commonly asked and must do practice problems for you.You can also take part in our mock placement contests which will help you learn different topics and practice at the same time, simulating the feel
9 min read
CSES Problem Set Solutions In this article, we have compiled comprehensive, high-quality tutorials on the CSES Problem Set Solutions to assist you in understanding the problem set for learning algorithmic programming. What is CSES Problem Set?CSES Problem Set is a collection of competitive programming tasks hosted on the CSES
8 min read
Competitive Programming (CP) Handbook with Complete Roadmap Welcome to the Competitive Programming Handbook or CP Handbook by GeeksforGeeks! This Competitive Programming Handbook is a go-to resource for individuals aiming to enhance their problem-solving skills and excel in coding competitions. This CP handbook provides a comprehensive guide, covering fundam
12 min read