Skip to content

Welcome to CP Club!

What is competitive programming?

It is the art of intelligence. To qualify in competitions, you have to learn a programming language, Algorithms, Data Structures, and some part of Discrete / Concrete Mathematics

But don't be terrified. The more challenges you take, the greater you get out of it!


It takes more than few days, few months, even several years to learn all the material and master your skills.

Therefore, practice is an essential part of competitive programming.

Some Main Topics

  1. Programming Language and Concepts

  2. Basic Data Structures

  3. Basic Algorithms

  4. More Advanced Topics and Virtual Contests

Training Plan

# Category Topic Tasks(P for Practice)
1 Programming Language Variables, Expressions, Input, Output, Conditioning, Loops P
2 Programming Language Loops, Arrays, String P
3 Programming Language Functions, Structs, Reference P
4 Programming Language STL, Useful Functions P
5 Contest Tricks Techniques, Preparation for CP P
6 Algorithms Recursion P
7 Data Structures Stack, Queue P
8 Algorithms Depth First Search P
9 Algorithms Breadth First Search P
10 Algorithms Greedy P
11 Algorithms Memorization and Dynamic Programming P
12 Data Structures Tree, Binary Tree P
13 Data Structures Priority Queue and Heap P
14 Data Structures Binary Search Tree P
15 Data Structures Disjoint Set (or Union-Find) P
16 Data Structures Storing a Graph P
17 Algorithms Shortest Path P

Coding Style

Computer Science is a practical subject, in some ways.

It does not stop at theories. Implementation is the art of coding.

The code should be reasonably short to save time. But it should also be clear and understandable for debugging.

Name variables with names that fit their meanings.

For example, if you want to count the occurrence of an element, name the variable int cnt = 0;, and make cnt += 1 every time you find the element.

Format your codes that you understand how loops and conditions build up the program.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
/*Good Example*/
#include <iostream>

using namespace std;

int main(){
    int n;
    cin >> n;
    cout << n << endl;
    return 0;
}

/*Bad Example, even thought it also works*/
#include <iostream>
using
namespace std;
int main(){int n;cin>> n;
    cout<<n
    << endl;
    return
    0;}

Helpful Sources & Books

There are many helpful online sources for programming, ranging from Youtube clips, Online Lectures, Online Judges, and other websites proving information.

Vjudge.net: a helpful website where I will publish question sets for training(not mandatory :-) )

Link to the Website

I will publish many questions on vjudge.net and save your time from searching for problems that fit your level

C++ Tutorial: on Youtube created by freeCodeCamp.org(4 hours) (Or any other videos are fine, we will go through the basic concepts again later)

Link to the Video

HackerRank: Have good questions to get familiar with C++

HackerRank

AtCoder: Japanese online judge website, the questions in ABC(AtCoder Beginner Contests) aren't too hard and fun to solve

I started practicing programming by solving ABC Task B & C on AtCoder

A good spreadsheet to track the problems solved: AtCoder problems

CodeForces: good questions, almost every one of them involves math, try the questions in Div.3 A, or with the tag "1000" or below that shows the difficulty of the problem

CodeForces Also, fun competitions are held every 1 or 2 weeks

Questions or Opinions

This is the original plan for the club meetings.

Although it seems to be a big plan, I will try to focus on only the essential topics to not get everyone stressed out.

I recommend solving problems to review the topics. But it is not mandatory and don't feel uncomfortable if you don't want to.

For each topic, I will post 3 ~ 5 problems relevant to the problem. They will be easy enough to solve within 3 hours at most.

If you are stuck on any problem, you can check my source codes and get a hint. But copying the source codes is not suggested.

Motivation

For anyone learning computer science or software engineering, or who just wants to get some fun, competitive programming is the right place to go.

You will realize that many software and technology are based on simple algorithms.

Also, there is a competition called the Canadian Computing Competition held by the University of Waterloo every year.

You can participate next year and win yourself a certificate. A chance of entering the national team and representing Canada in IOI(International Olympiad in Informatics) is also possible.

Most importantly, have fun.