Here is a concise summary of the provided text:
**Title:** Introduction to Competitive Programming
**Key Points:**
1. **Definition**: Competitive programming is a "sport" where programmers solve specific, niche problems with exact input/output formats, often on online judge platforms like Codeforces and DMOJ.
2. **Differences from Software Engineering**: Focus on solving individual problems with a clear "win" condition, rather than developing large-scale software.
3. **Example Problem**: Single Source Shortest Path (solved using Dijkstra's algorithm) is explained in detail, including its implementation and thought process.
4. **Challenges of Competitive Programming**: Often requires memorizing various algorithms (e.g., sorting, graph traversal) and their template implementations.
5. **Interesting Aspects**: Problems can deviate from standard templates, requiring deeper understanding of algorithms and creative problem-solving (illustrated with the "VM7WC '15 #4 Gold - Chain Rule" problem).
6. **Conclusion**: Competitive programming relies on both theoretical knowledge and implementation skills, offering a unique, logically challenging experience, albeit somewhat disconnected from traditional software engineering.
Here are the key facts extracted from the text, numbered and in short sentences, excluding opinions:
**General Facts**
1. Competitive programming is a semi-popular topic.
2. Competitive programming differs from software engineering.
3. In competitive programming, there is a defined way to "win".
4. Programs are made to solve specific or niche problems with exact input and output formats.
**Online Judges and Platforms**
5. Codeforces is a popular online judge for competitive programming.
6. DMOJ (Modern Online Judge) is another online judge platform.
7. Codeforces allows code submission via editor or file upload.
8. DMOJ allows code submission via editor (and uniquely, via Minecraft server).
**Problem-Solving and Algorithms**
9. Dijkstra's algorithm is used for solving Single Source Shortest Path problems.
10. Dijkstra's algorithm works by exploring nodes in order of shortest distance.
11. The algorithm uses an adjacency matrix, distance array, and priority queue.
12. The goal is to find the shortest distance to all nodes from a starting point.
**Specific Problem Examples**
13. The "A Plus B" problem involves outputting the sum of two input numbers.
14. The Single Source Shortest Path problem involves finding shortest distances to all points from a starting point.
15. The VM7WC '15 #4 Gold - Chain Rule problem requires finding the longest shortest path through a network with a hidden middle point.
**Miscellaneous**
16. Edsger Dijkstra is the creator of Dijkstra's algorithm.
17. Dijkstra's algorithm is often taught early in algorithm classes.