Bài 35: Setup Môi Trường Thi Đấu - Từ Đầu Đến Cuối¶
Tác giả: FPTOJ Team
1. Tại sao phải chuẩn bị "vũ khí" trước khi ra trận?¶
Hãy tưởng tượng bạn bước vào phòng thi, thời gian bắt đầu đếm ngược. Trong khi đối thủ đã code rào rào, bạn vẫn đang hì hục tìm cách cài đặt phần mềm... Đó là một cơn ác mộng!
Mục tiêu của bài này: Giúp bạn trang bị đầy đủ "vũ khí" từ A đến Z: cài đặt trình biên dịch, phần mềm viết code (editor), và có sẵn một bộ khung code (template) để chỉ việc copy-paste và chiến!
2. Tổng quan các phần mềm cần cài¶
| Phần mềm | Dùng để | Bắt buộc? |
|---|---|---|
| MinGW-w64 (hoặc MSYS2) | Biên dịch C/C++ trên Windows | Bắt buộc (nếu code C++) |
| Python 3 (hoặc PyPy) | Chạy code Python | Bắt buộc (nếu code Python) |
| Code Editor | Viết code | Bắt buộc |
| Code::Blocks | IDE all-in-one (editor + compile + debug) | Khuyến nghị cho người mới |
| Thonny | IDE Python đơn giản | Khuyến nghị cho người mới học Python |
| VS Code | Editor mạnh, hỗ trợ cả C++ và Python | Khuyến nghị cho người đã quen |
| Dev-C++ | IDE C++ nhẹ, phổ biến trong trường VN | Tùy chọn |
| Sublime Text | Editor nhẹ, nhanh | Tùy chọn |
| CP Editor | Editor chuyên cho competitive programming | Tùy chọn |
3. Bước 1: Cài trình biên dịch C/C++ (MinGW-w64)¶
3.1. Tại sao cần MinGW-w64?¶
Windows không có sẵn g++ (trình biên dịch C++). Bạn cần cài MinGW-w64 để có lệnh g++ chạy trong Command Prompt / PowerShell.
3.2. Tải và cài đặt¶
Cách 1: Tải trực tiếp (khuyến nghị)
- Vào https://www.mingw-w64.org/ → click Downloads
- Hoặc tải trực tiếp từ: https://github.com/niXman/mingw-builds-binaries/releases
- Chọn phiên bản:
x86_64-posix-seh(64-bit Windows) - Giải nén vào
C:\mingw64 - Thêm
C:\mingw64\binvào PATH:
Thêm vào PATH (Windows 10/11):
Cách 2: Dùng MSYS2 (nếu muốn quản lý packages)
- Tải MSYS2 từ https://www.msys2.org/
- Cài đặt vào
C:\msys64 - Mở MSYS2 UCRT64, chạy:
- Thêm
C:\msys64\ucrt64\binvào PATH
3.3. Kiểm tra¶
Mở Command Prompt mới (hoặc PowerShell), gõ:
Nếu hiện ra phiên bản (ví dụ g++ (x86_64-posix-seh-rev1, Built by MinGW-Builds project) 13.2.0) → thành công!
3.4. Lệnh compile cơ bản¶
| Flag | Ý nghĩa |
|---|---|
-std=c++17 |
Dùng chuẩn C++17 (có auto, structured bindings, ...) |
-O2 |
Tối ưu hóa tốc độ (quan trọng khi thi!) |
-Wall |
Hiển thị tất cả cảnh báo |
-o solution.exe |
Đặt tên file output |
Sơ đồ quy trình Viết code ➔ Biên dịch ➔ Chạy kiểm thử:
4. Bước 2: Cài Python / PyPy¶
4.1. Cài Python¶
- Vào https://www.python.org/downloads/
- Tải phiên bản mới nhất (3.12+)
- QUAN TRỌNG: Khi cài, tick chọn "Add Python to PATH"
- Cài đặt xong, mở Command Prompt mới:
4.2. Cài PyPy (tùy chọn - nhanh hơn Python 5-10 lần)¶
- Vào https://www.pypy.org/download.html
- Tải "PyPy3.10 Windows 64-bit" (hoặc phiên bản mới nhất)
- Giải nén vào
C:\pypy3 - Thêm
C:\pypy3vào PATH - Kiểm tra:
pypy3 --version
Khi nào dùng PyPy?
PyPy nhanh hơn Python rất nhiều cho competitive programming. Nhiều online judge (Codeforces, CSES) đều hỗ trợ PyPy. Nếu bài TLE với Python, thử PyPy!
4.3. Các thư viện Python thường dùng¶
Khi thi
Hầu hết online judge chỉ có thư viện chuẩn Python. Không được cài thêm thư viện bên ngoài!
5. Bước 3: Chọn và cài Code Editor / IDE¶
5.1. Code::Blocks (Khuyến nghị cho người mới)¶
Ưu điểm:
- All-in-one: editor + compiler + debugger trong 1 phần mềm
- Không cần cài thêm gì (đã có sẵn MinGW nếu tải phiên bản
codeblocks-xx.xx-mingw-setup) - Giao diện đơn giản, dễ dùng
- Phổ biến trong các trường học Việt Nam
Cài đặt:
- Vào https://www.codeblocks.org/downloads/binaries/
- Tải phiên bản
codeblocks-20.03mingw-setup.exe(có sẵn MinGW!) - Cài đặt bình thường
- Mở Code::Blocks → File → New → Project → Console Application → C++ → đặt tên → Finish
- Nhấn F9 để compile + chạy
Cấu hình:
- Settings → Compiler → chọn "GNU GCC Compiler"
- Settings → Compiler → Compiler flags → tick
-std=c++17và-O2
5.2. Thonny (Khuyến nghị cho người mới học Python)¶
Ưu điểm:
- Giao diện cực kỳ đơn giản, designed cho người mới
- Có sẵn Python (không cần cài riêng)
- Debug từng bước dễ dàng
- Phù hợp cho học sinh cấp 2, cấp 3 mới bắt đầu
Cài đặt:
- Vào https://thonny.org/
- Tải phiên bản cho Windows
- Cài đặt (Python đi kèm)
- Mở Thonny → viết code → nhấn F5 để chạy
Lưu ý: Thonny đơn giản nhưng thiếu một số tính năng khi thi đấu (không có snippet, không có compile C++). Nên chuyển sang VS Code hoặc Code::Blocks khi đã quen.
5.3. VS Code (Khuyến nghị cho người đã quen)¶
Ưu điểm:
- Hỗ trợ C++, Python, và hầu hết ngôn ngữ khác
- Extensions phong phú (IntelliSense, debugging, snippets)
- Terminal tích hợp
- Miễn phí, cross-platform
Cài đặt:
- Tải VS Code từ https://code.visualstudio.com/
- Cài đặt các extensions:
| Extension | Dùng cho |
|---|---|
| C/C++ (Microsoft) | IntelliSense, debugging C++ |
| Code Runner | Chạy code nhanh bằng 1 nút |
| Python (Microsoft) | Hỗ trợ Python |
| Competitive Programming Helper | Quản lý test case |
- Cấu hình Code Runner:
- Settings → Code Runner: Executor Map → thêm:
5.4. Dev-C++ (Phổ biến trong trường VN)¶
Ưu điểm:
- Nhẹ, cài nhanh
- Có sẵn MinGW
- Phổ biến trong các kỳ thi HSG tỉnh
Nhược điểm:
- Đã ngừng phát triển (phiên bản gốc)
- Giao diện cũ
Cài đặt:
- Tải từ https://sourceforge.net/projects/orwelldevcpp/
- Hoặc tải Embarcadero Dev-C++ (phiên bản mới hơn): https://github.com/Embarcadero/Dev-Cpp
- Cài đặt, mở Dev-C++ → File → New → Source File → viết code → F11 compile + chạy
5.5. Sublime Text (Editor nhẹ, nhanh)¶
Ưu điểm:
- Rất nhẹ, mở nhanh
- Gõ code mượt
- Hỗ trợ snippet
Nhược điểm: Không có built-in compiler, cần cấu hình thêm.
Cài đặt:
- Tải từ https://www.sublimetext.com/download
- Cài Package Control:
Ctrl+Shift+P→ gõ "Install Package Control" - Cài thêm package: C++ Snippets, Python Snippets
5.6. CP Editor (Editor chuyên cho competitive programming)¶
Ưu điểm:
- Tự động compile + chạy test case
- Tích hợp với competitive programming (Codeforces, AtCoder)
- Stress test built-in
- Template tự động
Cài đặt:
- Tải từ https://cpeditor.org/
- Cài đặt, cấu hình compiler path
- Tạo bài mới → viết code → nhấn Run để chạy tất cả test case
6. Bước 4: Template C++ cho thi đấu¶
Template cơ bản — Copy-paste là chạy¶
Giải thích từng phần¶
| Phần | Tác dụng |
|---|---|
#include <bits/stdc++.h> |
Include TẤT CẢ thư viện chuẩn (tiện, nhưng chỉ dùng khi thi) |
long long aliases |
Tránh viết dài, ll ngắn hơn |
all(x) |
(x).begin(), (x).end() — dùng cho sort(all(v)) |
MOD, INF, MAXN |
Hằng số thường dùng |
fastIO() |
Tắt sync C/C++, tăng tốc I/O rất nhiều |
int t = 1 |
Multi-test pattern |
Template nâng cao — Debug macro¶
NHỚ XÓA debug macro khi nộp bài!
Debug macro dùng cerr (in ra stderr), không ảnh hưởng output. Nhưng tốt nhất nên xóa trước khi submit.
7. Template Python cho thi đấu¶
Template cơ bản¶
Các import thường dùng¶
8. So sánh C++ vs Python trong thi đấu¶
| Tiêu chí | C++ | Python |
|---|---|---|
| Tốc độ | Nhanh (~10^8 phép tính/giây) | Chậm hơn (~10^7 phép tính/giây, PyPy ~10^7-10^8) |
| I/O | Cần fastIO() |
Cần sys.stdin.readline |
| Code ngắn | Trung bình | Ngắn hơn |
| Thư viện | bits/stdc++.h |
Import từng cái |
| Đệ quy | Không giới hạn | Cần setrecursionlimit |
| BigInt | Cần __int128 |
Tự động |
| Debug | cerr, macro |
print() |
Khi nào dùng C++?¶
- Bài cần tốc độ (N ≤ 10^6, O(N log N))
- Bài cần bitmask/DP trạng thái
- Bài dùng nhiều cấu trúc dữ liệu
Khi nào dùng Python?¶
- Bài toán lớn (BigInt, số rất lớn)
- Code nhanh (đếm, string processing)
- Bài ít test case, không cần tối ưu tốc độ
9. Workflow: Viết code → Compile → Chạy → Nộp bài¶
9.1. Với Code::Blocks¶
9.2. Với VS Code¶
9.3. Với Thonny (Python)¶
9.4. Với Command Prompt / PowerShell¶
10. Bước 5: Cài đặt trên Linux (Ubuntu)¶
Nếu bạn dùng Linux (hoặc WSL trên Windows):
11. Các Online Judge phổ biến¶
| Online Judge | URL | Ngôn ngữ hỗ trợ | Ghi chú |
|---|---|---|---|
| CSES | cses.fi | C++, Python, Java | Bài tập theo chủ đề, rất tốt cho người mới |
| Codeforces | codeforces.com | C++, Python, Java, ... | Contest hàng tuần, cộng đồng lớn |
| VNOJ | oj.vnoi.info | C++, Python | Bài tập Việt Nam, đề thi HSG |
| SPOJ | spoj.com | Hầu hết ngôn ngữ | Kho bài lớn, nhiều bài classic |
| LeetCode | leetcode.com | C++, Python, Java, ... | Phỏng vấn, luyện kỹ năng code |
| AtCoder | atcoder.jp | C++, Python, Java, ... | Contest chất lượng cao từ Nhật |
Lưu ý khi nộp bài¶
- Codeforces: Hỗ trợ C++17, C++20. Có PyPy 3 (nhanh hơn Python thường).
- CSES: Chỉ hỗ trợ C++ và Python. Timeout 1 giây, memory 512MB.
- VNOJ: Hỗ trợ C++ và Python. Một số bài có giới hạn thời gian nghiêm ngặt.
- SPOJ: Nhiều trình biên dịch khác nhau. Chọn đúng khi nộp.
12. Bước 6: Chuẩn bị cho ngày thi¶
Checklist trước khi thi¶
Mẹo: Tạo thư mục thi đấu sẵn¶
(Xem thêm Bài 39: Tổ chức code để biết chi tiết)
13. Lưu ý quan trọng¶
13.1. Dùng đúng kiểu dữ liệu¶
Quy tắc: Nếu không chắc → dùng long long!
13.2. Luôn dùng fastIO() trong C++¶
13.3. Quên endl → dùng "\n"¶
13.4. Python: input() vs sys.stdin.readline¶
13.5. Compile với flag đúng¶
14. Bảng so sánh các Editor / IDE¶
| Tiêu chí | Code::Blocks | Thonny | VS Code | Dev-C++ | Sublime Text | CP Editor |
|---|---|---|---|---|---|---|
| Dễ cài | ★★★★★ | ★★★★★ | ★★★★ | ★★★★★ | ★★★★ | ★★★ |
| Dễ dùng | ★★★★★ | ★★★★★ | ★★★★ | ★★★★ | ★★★ | ★★★ |
| Hỗ trợ C++ | ★★★★★ | ✗ | ★★★★★ | ★★★★★ | ★★★ | ★★★★★ |
| Hỗ trợ Python | ✗ | ★★★★★ | ★★★★★ | ✗ | ★★★ | ★★★ |
| Debug | ★★★★★ | ★★★★ | ★★★★★ | ★★★ | ★★ | ★★★★ |
| Snippet | ★★★ | ★★ | ★★★★★ | ★★★ | ★★★★ | ★★★★★ |
| Nhẹ | ★★★★ | ★★★★★ | ★★★ | ★★★★★ | ★★★★★ | ★★★★ |
| Phù hợp | Người mới | Người mới Python | Mọi người | Người mới | Người quen | Thi đấu |
Khuyến nghị theo đối tượng¶
| Đối tượng | Nên dùng |
|---|---|
| Học sinh cấp 2 mới bắt đầu | Thonny (Python) hoặc Code::Blocks (C++) |
| Học sinh cấp 3 luyện thi HSG | Code::Blocks hoặc VS Code |
| Đã quen code, muốn nhanh | VS Code + extensions hoặc CP Editor |
| Thi offline (trên máy trường) | Dev-C++ (thường đã có sẵn) hoặc Code::Blocks |
15. Bài tập luyện tập¶
Hãy setup template và thử submit bài đơn giản:
| Bài | Nền tảng | Mục đích |
|---|---|---|
| CSES - Weird Algorithm | CSES | Test template C++ |
| CSES - Missing Number | CSES | Test I/O |
| CSES - Permutations | CSES | Test logic đơn giản |
Tài liệu tham khảo¶
- MinGW-w64 - Downloads
- Code::Blocks - Downloads
- Thonny - Python IDE for beginners
- VS Code - Download
- CP Editor
- Codeforces - Good Contest Templates
- USACO Guide - Contest Strategy
Bài tiếp theo: Độ phức tạp thời gian →