# Fundamentals of Competitive Coding

Competitive coding problems are mathematical or logical, and typically involve one of the following categories: combinatorics, number theory, graph theory, geometry, string analysis, and data structures. In this article, I’ll walk you through the fundamentals of competitive coding.

The process of solving a competitive coding problem has two main steps; First, build an efficient algorithm, Second, implement the algorithm in an appropriate programming language.

In almost all of the competing coding platforms, you are automatically judged by the host machines. All solutions submitted by candidates will be run on the judge against a series of test cases.

Most of the time, problems have an all-or-nothing scoring system, which means the solution is either accepted or rejected. The faster you complete an accepted solution, the higher the online judges will rank you.

## The Fundamentals of Competitive Coding

Now, let’s start with the most important competitive coding basics that you need to know before you start competing.

#### Learn the C ++ Programming Language:

C ++ is by far the most popular programming language for competitive programmers. C++ offers a library called Standard Template Library. STL is a collection of C ++ model classes that provide all the necessary data structures and functions.

C ++ is followed by other languages ​​like Java, an object-oriented programming language. Java provides extensive libraries for data structures called Collections. Still, it’s a bit slower than C ++, which is a downside.

Another popular language in competition programming in Python because of its user-friendly functionality, as the code is significantly shorter and more concise than other programming languages. The downside to using Python is that it is quite slow compared to C / C ++ and Java.

#### Learn Complexity Analysis:

Before you delve into the world of competitive coding, you should cover complexity analysis, which is a way to describe the performance and efficiency of an algorithm as input increases. You need to analyze the complexity of running your algorithm to determine if your solution will meet the time limit.

There are three cases to consider complexity analysis:

• Best case
• Average case
• Worst case

When participating in competitive coding, you want to focus on the worst-case analysis. Typically, the entries will force your solution to its worst performance.

A data structure is a container that stores data in a specific layout. This “layout” allows a data structure to be efficient in some operations and inefficient in others.

Understanding data structures is essential to participate in competitive programming, as you will need to make decisions about which data structure to use to most effectively solve your problem.

If you took a computer science course in college, you are probably familiar with data structures. You should know more about all of the data structures mentioned below before you start with competitive coding:

1. Arrays
2. Stacks
3. Queues
5. Binary Tree
6. Binary Search Tree
7. Graphs
8. Tries
9. Hash tables
10. Heap

Algorithmic paradigms are general strategies for solving a problem. There are four popular forms of algorithmic paradigms: brute force, divide and conquer, greedy algorithms, and dynamic programming. To know the basics of competitive coding, you need to be familiar with Brute Force and dynamic programming.

Brute force algorithms are comprehensive methods of solving a problem through trial and error. He takes advantage of the computing power and tries all possibilities to find a solution. An example of a brute force algorithm is linear search, a method of finding a target value by iterating through each unique value in a list.

Dynamic programming is an algorithmic strategy for solving a problem by breaking it down into smaller subproblems using the fact that the optimal solution to the original problem depends on the optimal solution to its subproblems.

#### Learn Graph Algorithms:

A chart is a nonlinear data structure made up of nodes and edges. These nodes can also be called vertices. You can learn more about graphical algorithms and their practical implementation practice from here. 