Here you will find resources to help you get started with Competitive Programming. Created by the Competitive Programming Club at Ohio State.
These guides assume that you already know the basics of how to write code. If you don't, you can find many basic tutorials free online. Python is the easiest to learn with short and easy to understand code, but if you are at Ohio State, you might want to learn Java as it is the language used in most courses. Guides for Python, Java, and C++ are provided in the folders of this repository.
- Python - Easiest lanuage to learn. Short and readable code. Runs slower than the other languages but is still suitable for competitive programming.
- Java - Language taught at Ohio State. Faster than Python but less readable.
- C++ - The preferred language of most competitive programmers. Runs fast but difficult for beginners.
You can write code in whatever environment you want, although the most popular are VSCode, Eclipse, and Vim.
Competitive Programmer's Handbook by Antti Laaksonen: A free online ebook that covers most of the standard topics in competitive programming.
GeeksforGeeks Competitive Programming - A Complete Guide: An online syllabus explaining standard topics in competitive programming.
We do not have a competitive programming course at OSU but CSE 2221 and CSE 2231 teaches you the fundamentals of programming, how to receive input and output, and data structures. CSE 2321 and CSE 2331 teaches data structures and algorithms. CSE 6331 (Graduate) goes in depth on topics taught in Foundations I and II. After those courses, you may find CSE 4256 and CSE 4252 helpful in learning Python and C++. You may also find Math 3345 helpful in learning logic, set theory, and number theory.
Purdue University's CP Courses is taught by Ninghui Li, Gustavo Rodriguez-Rivera, and students of the ICPC teams
Carnegie Mellon University's 15-295 is taught by Danny Sleator
Baylor University's CSI 4144 is taught by Greg Hamerly
There are many sites that you can use to practice problems and each have their own benefits. Here are a few that we recommend but if you continuously solve problems that are just out of your comfort zone, you will improve!
BuckeyeCode: Our own website to host our flagship Buckeye Programming Competition. Problems from the contest and additional problems will also be available for people to solve. If you create a cool problem, we can add it to our website for others to try!
Codeforces: An awesome website used by the top competitive programmers. Contests are usually held starting at 10:35am ET and last for 2 hours. A good starting goal is to solve 3 problems from a Div 4 contest or 2 problems from a Div 3 or 1 problem from Div 2 and then you can work your way up. The average beginner will be around 500 rated and can easily get to 1000 with some practice. Most teams that advance to ICPC North America Championship (NAC) consist of members around the range of 1800 and upwards of 3000+.
CodeChef: Codechef has a number of beginner friendly problems and longer style competitions.
LeetCode: LeetCode is one of the most popular sites to get better at technical interview style problems. They also offer contests and you can sort problems by topics. It is important to note that not all of the standard topics in ICPC can be found in LeetCode.