This repository will help you to give the flavor of competitive programming from scratch to advanced.
WEEK-1:
Introduction to the world of competitive programming — the rules, specialties and helpful tips on taking part in competitions in general. In a separate lesson, we'll learn how to test programs: what kinds of test cases there are, how to organize the search for a bugtest, and particularly a method of automating testing called stress-testing.
Key Concepts:
1. Know various strategies for inventing test cases and testing programs
2. Understand what programming competitions and algorithmic problems are, what's the difference to other forms of programming
3. Learn about various platforms dedicated to competitive programming, and what opportunities do they offer
WEEK-2:
In this module, we'll start with the most basic things you need to actually solve algorithmic problems. First, we'll talk about structuring your code and intuition behind it — why it's very important, how to manage dependencies between parts of different purpose, how intuitive rules are enforced through formal invariants and conditions. We'll also identify a special class of solutions — brute force solutions — which are always correct, but often very slow. And we'll learn how to estimate running time of our solutions by using a powerful concept of big-O notation.
Key Concepts:
1. Deduce simple upper bounds on a solution's running time and decide if it's fast enough for a given time limit
2. Implement brute force solutions with basic recursive backtracking
3. Understand the connection between code structure and logics behind it
WEEK-3:
In competitive programming, there are a lot of things to stumble upon — if you don't know them first! We'll delve into how numbers are represented in computers, identify the most common issues with integer and floating point arithmetic, and learn to overcome them. We'll also discuss how to get stuck less in general, especially when debugging solutions.
Key Concepts:
1. Know how integers are represented
2. Identify places where integer overflow happens
3. Know and compare different ways of representing non-integers, including floating point arithmetic
4. Handle precision issues when performing basic operations with doubles
5.Distinguish common situations when solution could be simplified by replacing doubles with integers
6. Apply code structuring to simplify debugging
7.Auto-check program correctness by identifying invariants and inserting corresponding assertions
8.Understand motivation and strategy for upsolving
1. Python version greater than 3.6
Licensed under the MIT License