Guide to Competitive Programming


Book Description

This invaluable textbook presents a comprehensive introduction to modern competitive programming. The text highlights how competitive programming has proven to be an excellent way to learn algorithms, by encouraging the design of algorithms that actually work, stimulating the improvement of programming and debugging skills, and reinforcing the type of thinking required to solve problems in a competitive setting. The book contains many “folklore” algorithm design tricks that are known by experienced competitive programmers, yet which have previously only been formally discussed in online forums and blog posts. Topics and features: reviews the features of the C++ programming language, and describes how to create efficient algorithms that can quickly process large data sets; discusses sorting algorithms and binary search, and examines a selection of data structures of the C++ standard library; introduces the algorithm design technique of dynamic programming, and investigates elementary graph algorithms; covers such advanced algorithm design topics as bit-parallelism and amortized analysis, and presents a focus on efficiently processing array range queries; surveys specialized algorithms for trees, and discusses the mathematical topics that are relevant in competitive programming; examines advanced graph techniques, geometric algorithms, and string techniques; describes a selection of more advanced topics, including square root algorithms and dynamic programming optimization. This easy-to-follow guide is an ideal reference for all students wishing to learn algorithms, and practice for programming contests. Knowledge of the basics of programming is assumed, but previous background in algorithm design or programming contests is not necessary. Due to the broad range of topics covered at various levels of difficulty, this book is suitable for both beginners and more experienced readers.




Competitive Programming 4 - Book 1


Book Description

This Competitive Programming book, 4th edition (CP4) is a must have for every competitive programmer. Mastering the contents of this book is a necessary (but admittedly not sufficient) condition if one wishes to take a leap forward from being just another ordinary coder to being among one of the world's finest competitive programmers. Typical readers of Book 1 (only) of CP4 would include: (1). Secondary or High School Students who are competing in the annual International Olympiad in Informatics (IOI) (including the National or Provincial Olympiads) as Book 1 covers most of the current IOI Syllabus, (2). Casual University students who are using this book as supplementary material for typical Data Structures and Algorithms courses, (3). Anyone who wants to prepare for typical fundamental data structure/algorithm part of a job interview at top IT companies. Typical readers of both Book 1 + Book 2 of CP4 would include: (1). University students who are competing in the annual International Collegiate Programming Contest (ICPC) Regional Contests (including the World Finals) as Book 2 covers much more Computer Science topics that have appeared in the ICPCs, (2). Teachers or Coaches who are looking for comprehensive training materials, (3). Anyone who loves solving problems through computer programs. There are numerous programming contests for those who are no longer eligible for ICPC, including Google CodeJam, Facebook Hacker Cup, TopCoder Open, CodeForces contest, Internet Problem Solving Contest (IPSC), etc.







Programming Challenges


Book Description

There are many distinct pleasures associated with computer programming. Craftsmanship has its quiet rewards, the satisfaction that comes from building a useful object and making it work. Excitement arrives with the flash of insight that cracks a previously intractable problem. The spiritual quest for elegance can turn the hacker into an artist. There are pleasures in parsimony, in squeezing the last drop of performance out of clever algorithms and tight coding. The games, puzzles, and challenges of problems from international programming competitions are a great way to experience these pleasures while improving your algorithmic and coding skills. This book contains over 100 problems that have appeared in previous programming contests, along with discussions of the theory and ideas necessary to attack them. Instant online grading for all of these problems is available from two WWW robot judging sites. Combining this book with a judge gives an exciting new way to challenge and improve your programming skills. This book can be used for self-study, for teaching innovative courses in algorithms and programming, and in training for international competition. The problems in this book have been selected from over 1,000 programming problems at the Universidad de Valladolid online judge. The judge has ruled on well over one million submissions from 27,000 registered users around the world to date. We have taken only the best of the best, the most fun, exciting, and interesting problems available.




Competitive Programming in Python


Book Description

Want to kill it at your job interview in the tech industry? Want to win that coding competition? Learn all the algorithmic techniques and programming skills you need from two experienced coaches, problem setters, and jurors for coding competitions. The authors highlight the versatility of each algorithm by considering a variety of problems and show how to implement algorithms in simple and efficient code. Readers can expect to master 128 algorithms in Python and discover the right way to tackle a problem and quickly implement a solution of low complexity. Classic problems like Dijkstra's shortest path algorithm and Knuth-Morris-Pratt's string matching algorithm are featured alongside lesser known data structures like Fenwick trees and Knuth's dancing links. The book provides a framework to tackle algorithmic problem solving, including: Definition, Complexity, Applications, Algorithm, Key Information, Implementation, Variants, In Practice, and Problems. Python code included in the book and on the companion website.




Learn to Code by Solving Problems


Book Description

Learn to Code by Solving Problems is a practical introduction to programming using Python. It uses coding-competition challenges to teach you the mechanics of coding and how to think like a savvy programmer. Computers are capable of solving almost any problem when given the right instructions. That’s where programming comes in. This beginner’s book will have you writing Python programs right away. You’ll solve interesting problems drawn from real coding competitions and build your programming skills as you go. Every chapter presents problems from coding challenge websites, where online judges test your solutions and provide targeted feedback. As you practice using core Python features, functions, and techniques, you’ll develop a clear understanding of data structures, algorithms, and other programming basics. Bonus exercises invite you to explore new concepts on your own, and multiple-choice questions encourage you to think about how each piece of code works. You’ll learn how to: Run Python code, work with strings, and use variables Write programs that make decisions Make code more efficient with while and for loops Use Python sets, lists, and dictionaries to organize, sort, and search data Design programs using functions and top-down design Create complete-search algorithms and use Big O notation to design more efficient code By the end of the book, you’ll not only be proficient in Python, but you’ll also understand how to think through problems and tackle them with code. Programming languages come and go, but this book gives you the lasting foundation you need to start thinking like a programmer.




Algorithmic Thinking


Book Description

A hands-on, problem-based introduction to building algorithms and data structures to solve problems with a computer. Algorithmic Thinking will teach you how to solve challenging programming problems and design your own algorithms. Daniel Zingaro, a master teacher, draws his examples from world-class programming competitions like USACO and IOI. You'll learn how to classify problems, choose data structures, and identify appropriate algorithms. You'll also learn how your choice of data structure, whether a hash table, heap, or tree, can affect runtime and speed up your algorithms; and how to adopt powerful strategies like recursion, dynamic programming, and binary search to solve challenging problems. Line-by-line breakdowns of the code will teach you how to use algorithms and data structures like: The breadth-first search algorithm to find the optimal way to play a board game or find the best way to translate a book Dijkstra's algorithm to determine how many mice can exit a maze or the number of fastest routes between two locations The union-find data structure to answer questions about connections in a social network or determine who are friends or enemies The heap data structure to determine the amount of money given away in a promotion The hash-table data structure to determine whether snowflakes are unique or identify compound words in a dictionary NOTE: Each problem in this book is available on a programming-judge website. You'll find the site's URL and problem ID in the description. What's better than a free correctness check?




Elements of Programming


Book Description

Elements of Programming provides a different understanding of programming than is presented elsewhere. Its major premise is that practical programming, like other areas of science and engineering, must be based on a solid mathematical foundation. This book shows that algorithms implemented in a real programming language, such as C++, can operate in the most general mathematical setting. For example, the fast exponentiation algorithm is defined to work with any associative operation. Using abstract algorithms leads to efficient, reliable, secure, and economical software.




An Introduction to Linear Programming and Game Theory


Book Description

Praise for the Second Edition: "This is quite a well-done book: very tightly organized, better-than-average exposition, and numerous examples, illustrations, and applications." —Mathematical Reviews of the American Mathematical Society An Introduction to Linear Programming and Game Theory, Third Edition presents a rigorous, yet accessible, introduction to the theoretical concepts and computational techniques of linear programming and game theory. Now with more extensive modeling exercises and detailed integer programming examples, this book uniquely illustrates how mathematics can be used in real-world applications in the social, life, and managerial sciences, providing readers with the opportunity to develop and apply their analytical abilities when solving realistic problems. This Third Edition addresses various new topics and improvements in the field of mathematical programming, and it also presents two software programs, LP Assistant and the Solver add-in for Microsoft Office Excel, for solving linear programming problems. LP Assistant, developed by coauthor Gerard Keough, allows readers to perform the basic steps of the algorithms provided in the book and is freely available via the book's related Web site. The use of the sensitivity analysis report and integer programming algorithm from the Solver add-in for Microsoft Office Excel is introduced so readers can solve the book's linear and integer programming problems. A detailed appendix contains instructions for the use of both applications. Additional features of the Third Edition include: A discussion of sensitivity analysis for the two-variable problem, along with new examples demonstrating integer programming, non-linear programming, and make vs. buy models Revised proofs and a discussion on the relevance and solution of the dual problem A section on developing an example in Data Envelopment Analysis An outline of the proof of John Nash's theorem on the existence of equilibrium strategy pairs for non-cooperative, non-zero-sum games Providing a complete mathematical development of all presented concepts and examples, Introduction to Linear Programming and Game Theory, Third Edition is an ideal text for linear programming and mathematical modeling courses at the upper-undergraduate and graduate levels. It also serves as a valuable reference for professionals who use game theory in business, economics, and management science.