This tutorial will help you to get introduced to competitive programming as well as gain the basic skill set required to be able to participate in the bootcamp.

**Getting Introduced to Problem Solving:**

If you are completely new in the field of problem solving, we strongly suggest you go through this Problem Solving Guideline made by us.

**Getting Prepared for Bootcamp:**

Bootcamp is the gateway to join the NSU Problem Solvers Community. In order to be eligible to participate in boot camp, you have to learn a few things by yourself. The skills you need to acquire are the basic tools you need to start competitive programming and are easily attainable for anyone who is willing to put in a little effort.

In each of the following steps you are provided with a contest. Solving a considerable amount of problems from each of these contests will help you to acquire the expected skill set and get you prepared for the bootcamp.

You are advised to approach the contests in the given order. Although these contests are not prerequisites for the bootcamp, we strongly suggest that you solve as many as you can from them. You can discuss these problems with others, but copy-pasting others’ solutions is strictly prohibited (and will be considered as cheating).

The following steps will sequentially guide you to acquire the necessary skill set.

#### Getting Introduced to Vjudge:

Here, we will introduce a special type of online judge: Vjudge. Vjudge is a contest hosting site which has a collection of all the problems from most of the online judges. We will arrange all of our contests on this website. So please register here: https://vjudge.net/. You’ll also need to provide the user id of your Vjudge account during the registration of Bootcamp.

We have arranged a contest to help you get used to Vjudge. Here is the contest link: **https://vjudge.net/contest/21152** . Solve all 3 problems if you are using Vjudge for the first time. These are fairly simple problems to code and the Vjudge user interface is easy to use.

**Note:** You don’t need to know all the details of other online judges other than vjudge for the time being. Just register at vjudge and try to get familiar with it, as all of our contests will be hosted on this website.

#### Instructions for Java Programmers:

Java programmers usually face some problems at the very beginning, most of which are related to input-output. Our expert alumni Aminul Haq has made a tutorial that will help you solve those issues. Please go through this **Java Starter Guide****.**

**Level 01 (Solve some straightforward problems):**

We have created a contest with some easier problems for the beginners. Most of the problems are quite straightforward and doesn’t require much logical thinking. It’ll help you to get used to problem-solving in any particular language. We suggest that you solve all the problems before moving on to step 2. It’ll help you a lot to get comfortable with the programming contest environments.

**Contest Link: https://vjudge.net/contest**

**Required Knowledge:**

- Basic syntax of any of the programming languages (C, C++ or java)
- Conditional statements (If/else)
- Loop
- Array sorting

**Resources:**

**Level 02 (Enhance your basic math skills):**

In programming contests, a lot of problems require knowledge from high school mathematics in order to be solved. You need to have a good grasp on topics like combinatorics, probability, basic geometry etc. The set of problems on this section are mostly mathematical. Don’t get scared if you are not particularly strong in maths. These problems don’t demand deep mathematical observation, rather basic mathematical skills.

**Contest Link: https://vjudge.net/contest**

**Required Knowledge:**

- Basic high school mathematics
- Arithmetic operations in C, C++ or Java.
- Basic Euclidean geometry
- Probability basics

**Resources:**

- https://www.khanacademy.org/math/early-math
- https://www.khanacademy.org/math/arithmetic
- https://www.khanacademy.org/math/geometry
- https://www.khanacademy.org/math/statistics-probability

**Note:** You don’t need to learn everything from the given resources for the time being. Just try to go through the first few lectures from each topic. But the more you learn the more will be better for you in the future.

[Note: In many problems, you might encounter the issue of integer overflow which could lead to the Wrong answer. So if the values seem to get too large( 10^9 or higher) in your program, use long long instead of int].

**Level 03 (Get introduced to STL):**

In steps 1 and 2, the problems could be solved by using the basic tools of any programming language (e.g. array). Now you will get introduced to some advanced tools of a programming language which come very handy in solving different types of problems. In C++ these tools are part of the Standard Template Library (STL). The tools available in C++ are also available in other modern programming languages like JAVA. In this article, we will refer to C++ library while talking about these tools. You can easily find their equivalent names in Java. Note that C doesn’t have STL (in fact the most significant difference between C and C++ is that the former doesn’t have STL). So we would highly recommend C programmers to shift to C++ since the syntaxes are practically the same, only with a few additions in C++.

**Contest Link: https://vjudge.net/contest**

**Required Knowledge:**

- STL in C, C++ or Java (Although we advise C++)
- Basic STL libraries: Array, Vector, Sorting, Map, Pair and Set.
- Some advance STL libraries: Stack, Queue, Ppriority Queue, Dequeue, etc.

**Resources:**

- C++ STL Documentation by NSUPS
- https://www.geeksforgeeks.org/the-c-standard-template-library-stl/
- https://www.topcoder.com/community/competitive-programming/tutorials/power-up-c-with-the-standard-template-library-part-1/
- https://www.hackerearth.com/practice/notes/standard-template-library/

**Level 04 (Improve your implementation skill):**

Now you are ready to solve a little harder implementation problems. In order to solve these problems, you don’t need to know any algorithm or have extensive knowledge. The problems are easy to approach but you need to code carefully. You may have to handle different types of corner cases while solving these problems. This will help you a lot to improve your coding skill.

**Contest Link: https://vjudge.net/contest**

Required Knowledge:

- Decent implementation skills
- Handling corner cases
- Knowing how to keep the code simple
- Focusing on the readability

**Resources:**

- The more problems you solve the more your implementation skills get improved.

**Level 05 (Learn about string manipulations):**

This step also focuses on developing your implementation skills. The specialty of this section is that most of the problems you will encounter involve string. Using the String class of C++ which is enriched with many useful methods might come handy in implementing these problems. You should try to learn how to use those built-in functions to perform different types of operations very easily.

**Contest Link: https://vjudge.net/contest**

Required Knowledge:

- Input and output of a string
- Iteration through the characters of the string
- Manipulation of string using built-in functions
- Familiarity with substring, find, sorting and reverse operation of a string

**Resources:**

- https://cal-linux.com/tutorials/strings.html
- C++ STL Documentation by NSUPS (String section)
- http://www.cplusplus.com/reference/string/string/

**Key Points:**

- We strictly maintain zero tolerance to plagiarism. Don’t copy paste the solution of your friends or from google. If you are caught cheating (for any single problem), you shall not be allowed to participate in the bootcamp no matter how many problems you manage to solve.
- In order to be competent for the boot camp, we highly suggest that you solve at least 40-50 problems, although it is not mandatory.
- Don’t remain stuck on one problem for too long. If you cannot solve a particular problem, move on to a different one after spending a reasonable time on it. Solve other problems and then come back to it later if there is enough time.
- The provided resources might not be enough for you. But you can always google and find thousands of other available resources which may seem more understandable to you.

What are the passwords for vjudge contest?

The password is provided in the post.

Password: bootcampseason02

One has to complete step 1 to step 5 shown above to enter the bootcamp? I mean one has to know STL to enter?