Wiki › Kỹ năng giải bài › Ôn thi VOI

Ôn thi VOI

huunguyen huunguyen Updated Tháng 9. 30, 2026 Đọc 15 phút 24 lượt xem

Trang này là điểm xuất phát cho ai ôn thi VOI (kỳ thi chọn học sinh giỏi quốc gia môn Tin học). Nội dung được tổng hợp từ 119 đề VOI 2005 - 2026 (22 năm; từ 2011 mỗi năm đủ 2 ngày x 3 bài, các năm cũ hơn chỉ còn lưu được 3 đến 7 bài), tất cả đều đã có trên CTOJ để luyện. Phần dự đoán và lộ trình dựa chủ yếu vào giai đoạn hiện đại 2016 - 2026. Độ khó ghi theo thang rating kiểu Codeforces. Mỗi kỹ thuật dưới đây đều có trang wiki riêng với trực giác, ví dụ chạy tay, lỗi thường gặp và mục "Đề VOI" chỉ ra bài nào dùng kỹ thuật đó.

Đề VOI trông như thế nào

  • Hình thức: 2 ngày, mỗi ngày 3 bài trong 180 phút; bài chấm theo lô (batch) chuẩn, chấm subtask theo phần trăm, bài nào cũng có subtask nhỏ giải được bằng vét cạn. Chưa từng có bài interactive hay output-only.
  • Giới hạn: input lớn dần (105 đến 106 phần tử là phổ biến), thời gian 1 đến 3 giây (bài cấu trúc dữ liệu nặng có thể tới 4 giây); thời cũ thì ngược lại, input nhỏ nhưng thời gian rất chặt (0.1 đến 0.6 giây). Hình học luôn là hình học nguyên, không có số thực.
  • Độ khó tăng đều suốt 22 năm, và sàn tăng nhanh hơn trần (rating trung bình, dễ nhất, khó nhất mỗi năm):
Năm 2005* 2006 2007* 2008* 2009* 2010* 2011 2012 2013 2014 2015
Số bài 4 7 3 3 3 3 6 6 6 6 6
Trung bình 1975 1371 1500 1467 1700 1500 1433 1650 1717 1767 1783
Dễ nhất 1400 1300 1000 1100 1200 1100 1000 1200 1400 1200 1500
Khó nhất 2500 2300 1800 1900 2200 2000 1900 1900 2000 2200 2300
Năm 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
Trung bình 2050 1850 1717 2117 1883 2000 2000 2033 2217 2250 2333
Dễ nhất 1600 1500 1400 1400 1400 1600 1600 1700 1800 1700 2000
Khó nhất 2400 2400 2100 2500 2200 2300 2500 2400 2600 2500 2600

(*) Năm chỉ còn lưu được 3 - 4 bài nên số liệu chỉ mang tính tham khảo; riêng 2005 bị lệch lên vì các bài còn lại đều là bài "đáng nhớ", trong đó có voi05_firewk (2500).

Nhìn tổng thể: trung bình từ khoảng 1400 - 1650 (2006 - 2012) lên 1700 - 1850 (2013 - 2018) rồi 2200 - 2330 (2024 - 2026). Sàn tăng nhanh hơn trần: bài 1000 - 1300 phổ biến tới 2012, bài 1400 còn tới 2020, năm 2026 sàn đã là 2000; trần chỉ tăng từ khoảng 2300 lên 2600.

Hệ quả thực tế: bài mở màn đã lên mức 2000 (năm 2026), không còn bài "lấy điểm miễn phí". Muốn có giải phải giải trọn được bài 2000+ và gom subtask của các bài còn lại.

Ba thời kỳ của đề VOI

Thời kỳ Trung bình Đặc trưng Bài tiêu biểu
Cổ điển 2005 - 2012 ~1400 - 1650 Duyệt, quay lui, mô phỏng, số lớn (thời Pascal), thuật toán nền; thỉnh thoảng một bài vượt thời đại voi05_firewk (DP + KMP + Möbius), voi06_change (nhánh cận), voi10_taxid (digit DP đầu tiên), voi12_travel
Chuyển tiếp 2013 - 2018 ~1700 - 1850 Chuẩn hóa 6 bài/năm, mô hình hóa khéo trên thuật toán giáo trình (MST, Dijkstra, DP, tham lam có chứng minh), input cực lớn từ 2016 voi14_jobset (lát cắt nhỏ nhất), voi14_aznet, voi15_tsort, voi16_doncay, voi18_seq
Hiện đại 2019 - 2026 ~1900 - 2330 Cấu trúc dữ liệu + truy vấn, cây, sweep line hình học nguyên, đếm tổ hợp và digit DP nặng; không còn bài dễ voi19_robot, voi24_fbuy, voi25_encode, voi26_camp

Bản đồ kiến thức

Số bài là ước lượng trên 119 bài 2005 - 2026 (một bài có thể thuộc nhiều nhóm).

Nhóm Số bài Kỹ thuật (trang wiki) Đề VOI tiêu biểu
Quy hoạch động ~35 DP khoảng, DP bitmask, DP chữ số, DP broken profile / plug DP, DP trên cây, Knapsack trên cây, DP kết hợp CTDL, SOS DP, Slope trick voi20_bonus, voi19_aspal, voi25_pnum, voi19_robot, voi20_equake, voi16_doncay, voi18_seq, voi10_taxid, voi07_market
Đồ thị ~33 BFS, Dijkstra, DSU, DSU rollback, Cây khung nhỏ nhất, Cầu và khớp, Đồ thị hàm, Cặp ghép hai phía, SCC, Luồng voi17_metro, voi26_light, voi17_bgame, voi20_bus, voi21_teamup, voi16_exam, voi06_cirarc, voi09_stnode, voi14_jobset
Cây chuyên sâu (chỉ từ 2020) ~8 LCA, Binary lifting, Euler tour, HLD, Centroid decomposition, Đổi gốc voi25_ship, voi24_fbuy, voi26_pine, voi24_netw, voi23_food
Cấu trúc dữ liệu ~20 Segment tree, Fenwick, Treap, Sparse table, Chia căn, Trie, Tham lam với heap, Truy vấn offline voi22_sseq, voi23_income, voi25_tseq, voi21_bonus, voi18_queue, voi24_impev, voi05_segpar, voi15_tsort
Hình học + quét ~15 Sweep line, Khoảng cách Manhattan, xoay 45 độ, Cây Steiner, Bao lồi voi17_hway, voi20_stars, voi22_paint, voi25_roai, voi16_rbull, voi19_efill, voi26_camp, voi05_steel, voi14_ballgm
Tổ hợp + số học ~25 Tổ hợp, Bao hàm loại trừ, Hạng hoán vị, Euclid mở rộng, Đếm số nguyên tố, Nguyên lý Dirichlet, Số lớn voi21_or, voi24_noel, voi25_encode, voi26_tet, voi22_matrix, voi24_wpro, voi17_fibseq, voi05_firewk, voi15_crypt, voi11_tline
Tham lam, chặt nhị phân, hai con trỏ ~25 Tham lam, Sắp xếp và tìm kiếm nhị phân, Hai con trỏ voi16_idcode, voi16_haucan, voi22_pair, voi23_sdev, voi26_gift, voi25_cycle, voi09_pagoda, voi12_cross, voi07_robot
Xâu ~11 Hash xâu, KMP, Z-function, Suffix array voi17_virus, voi19_comstr, voi23_adn, voi26_post, voi05_firewk, voi13_msg
Duyệt, quay lui, mô phỏng (chủ yếu thời cũ) ~12 Quay lui và nhánh cận, Số lớn voi06_change, voi13_bonus, voi11_colrec, voi08_gifts, voi18_robot

Chỉ xuất hiện đúng một lần trong 22 năm (biết dạng, không cần luyện sâu): luồng, lát cắt nhỏ nhất (voi14jobset), lý thuyết trò chơi thuần (voi11pgame), nút xung yếu (voi09stnode), nhánh cận (voi06change), tính chất trao đổi của cây khung (voi14aznet), slope trick (voi18seq), plug DP (voi19robot), sàng Lucy (voi22matrix), suffix array (voi25encode), treap (voi25tseq).

Chưa từng xuất hiện trong 2005 - 2026: 2-SAT, FFT, suffix automaton, Aho-Corasick, Li Chao và CHT, hình học số thực, bài interactive. Chỉ cần biết khái niệm, không nên đầu tư sâu.

Xu hướng 2005 - 2026

  1. Độ khó tăng gần gấp đôi về mặt bằng. Trung bình từ ~1400 - 1650 (2006 - 2012) lên ~1700 - 1800 (2013 - 2018) rồi ~2200 - 2330 (2024 - 2026). Sàn tăng nhanh hơn trần: bài 1000 - 1300 phổ biến tới 2012, còn 1400 tới 2020, năm 2026 sàn đã là 2000.
  2. Đề tiến hóa từ cài đặt sang mô hình hóa rồi sang cấu trúc dữ liệu. Từ 2023 đa số bài có Q truy vấn, xử lý offline, segment tree, Fenwick, treap.
  3. Cây là chủ đề nóng nhất hiện nay nhưng hoàn toàn mới: 15 năm đầu không có bài cây chuyên sâu nào; từ 2020 mỗi năm 1 đến 2 bài (HLD, centroid, DP trên cây, LCA).
  4. Hình học đổi thế hệ: thời cũ là hình học rời rạc + duyệt (voi05steel, voi11colrec); từ 2016 là sweep line + cấu trúc dữ liệu, có mặt 9/11 năm gần nhất. Luôn là hình học nguyên.
  5. Kỹ năng trường tồn: DP (mọi thời kỳ, chỉ đổi độ sâu), tham lam có chứng minh, chặt nhị phân, BFS/Dijkstra, đếm tổ hợp. Digit DP là "mầm cũ nở muộn": gieo năm 2010 (voi10_taxid), thành vũ khí phân loại từ 2019 (aspal, pnum).
  6. Kỹ năng đã biến mất: số lớn (bắt buộc 2007 - 2013), SCC và nút xung yếu (2006 - 2009), quay lui nhánh cận làm lời giải chính (đỉnh điểm 2006), cặp ghép (lần cuối 2016), luồng (một lần, 2014). Quay lui vẫn cần, nhưng để gom subtask nhỏ.
  7. Kỹ thuật "hàn lâm" xuất hiện một lần rồi thôi, ở mọi thời kỳ, và luôn kèm subtask gỡ điểm: gặp bài lạ thì lấy subtask trước.

Dự đoán cho VOI 2027

Đây là dự đoán xác suất dựa trên tần suất giai đoạn hiện đại 2016 - 2026 (đề cũ hơn khác phong cách nên ít giá trị dự đoán), không phải cam kết. Độ khó dự kiến: trung bình khoảng 2300 - 2400, bài dễ nhất khoảng 1900 - 2100.

Khả năng Chủ đề Trang nên ôn
~85% Cây + cấu trúc dữ liệu (truy vấn đường đi, cây con) HLD, Euler tour, LCA, Centroid
~80% Segment tree / Fenwick / truy vấn offline Segment tree, Fenwick, Truy vấn offline
~75% Đếm tổ hợp hoặc digit DP Tổ hợp, DP chữ số, Bao hàm loại trừ
~70% Sweep line / hình học nguyên Sweep line, Khoảng cách Manhattan
~65% Tham lam + chặt nhị phân theo đáp án + heap Tham lam với heap, Tìm kiếm nhị phân
~60% DP khó (trạng thái nén, DP tối ưu chuyển) DP kết hợp CTDL, DP bitmask, DP trên cây
~40% Xâu nặng (hashing, Z, suffix array) Hash xâu, Z-function, Suffix array
~30% Số học nặng Đếm số nguyên tố, Euclid mở rộng
~15% Cặp ghép hai phía, slope trick Cặp ghép hai phía, Slope trick

Lộ trình ôn luyện (khoảng 18 tuần)

Nguyên tắc chung: mỗi bài tự làm hết subtask nhỏ trước khi đọc lời giải, và sau khi đọc phải cài lại từ đầu không nhìn code.

Giai đoạn 1, củng cố nền (4 tuần). Mục tiêu: mọi kỹ thuật mức 1400 - 1800 thành phản xạ.

Giai đoạn 2, chuyên đề trọng điểm khối 1 (4 tuần).

Giai đoạn 3, chuyên đề trọng điểm khối 2 (4 tuần).

Giai đoạn 4, luyện đề thật (4 tuần). Mỗi tuần 2 buổi thi thử đúng điều kiện (180 phút, 3 bài, không mạng), lần lượt đề VOI 2020, 2023, 2025, 2026 (danh sách ở mục cuối). Chữa hết 3 bài trong 48 giờ, cài lại lời giải chuẩn, ghi sổ lỗi: sai ở đọc đề, thuật toán, cài đặt hay quản lý thời gian. Đề 2021, 2022, 2024 để dành làm đề dự phòng.

Giai đoạn 5, nước rút (2 - 3 tuần). Mỗi ngày 1 bài mức 2000 - 2300 làm trọn vẹn; ôn sổ lỗi và template (segment tree lazy, HLD, Fenwick, Dijkstra, LCA, khung digit DP, hashing); buổi thi thử cuối cách ngày thi ít nhất 5 ngày.

Tự kiểm tra cuối mỗi giai đoạn
Mốc Đạt khi
Hết giai đoạn 1 Giải trọn mọi đề VOI rating dưới 1800 không cần lời giải
Hết giai đoạn 2 Cài HLD, centroid, sweep + segment tree không nhìn tài liệu; giải được voi26pine, voi20stars
Hết giai đoạn 3 Giải được voi25pnum, voi24noel (có thể cần gợi ý một lần); template đầy đủ
Hết giai đoạn 4 Thi thử đạt trung bình 50%+ tổng điểm mỗi ngày của đề 2025 - 2026

Chiến thuật phòng thi

  1. 15 phút đầu đọc cả 3 bài, xếp thứ tự làm theo tỉ lệ (điểm subtask dễ lấy) / (thời gian ước tính), không theo thứ tự đề. Xem thêm Tiếp cận bài toán mới và Ước lượng giới hạn.
  2. Luôn nộp vét cạn trước. Mỗi bài đều có subtask nhỏ; gom 20 - 40% mỗi bài là chênh lệch một bậc giải.
  3. Quy tắc 60 phút: bế tắc một bài quá 60 phút thì chốt subtask rồi chuyển bài, quay lại nếu còn thời gian.
  4. Trước khi nộp bản đầy đủ, tự sinh test biên (n nhỏ nhất, giá trị trùng, đồ thị không liên thông, tràn số) và đối chiếu với vét cạn: xem Kỹ thuật debug.
  5. Cẩn thận long long, đọc kỹ giới hạn từng subtask. Giới hạn thời gian rất chặt so với input thường là dấu hiệu cần thuật toán nhanh hơn hẳn.

Đề VOI 2005 - 2026 trên CTOJ

Dùng để thi thử theo năm: mỗi buổi 180 phút chọn 3 bài cùng năm. Các bài trong bảng xếp theo mã bài, không theo ngày thi. Đề 2016 - 2026 sát phong cách hiện nay nhất; đề 2005 - 2015 hợp để luyện kỹ năng nền và làm quen dạng cũ.

Năm Các bài (rating)
2005 Bộ sưu tập (1400), Pháo hoa (2500), Phân đoạn (1800), Khuôn thép (2200)
2006 Quân tượng (1400), Biến đổi bảng (2300), Kênh xung yếu (2100), Dãy con dài nhất (1400), Mạng máy tính (1500), Đường đi trên lưới (1600), Chọn ô (1300)
2007 Siêu thị may mắn (1800), Dãy con không giảm dài nhất (1000), Robot cứu hỏa (1700)
2008 Quà tết (1900), Lò cò (1400), Trò chơi với dãy số (1100)
2009 Trò chơi với băng số (1200), Đường lên Bái Đính (2200), Nút st - xung yếu (1700)
2010 Dãy con chung không liền kề dài nhất (1100), Ổn định (1400), Mã số thuế (2000)
2011 Phần thưởng (1000), Nối điểm đen trắng (1200), Hình chữ nhật bốn màu (1500), Trò chơi chẵn lẻ (1400), Hàng cây (1900), Nâng cấp mạng (1600)
2012 Qua cầu (1800), Bản vanxơ Fibonacci (1600), Khoảng cách Hamming (1200), Điều động (1700), Robocon (1700), Hành trình du lịch (1900)
2013 Phần thưởng (1400), Mạng truyền thông (1800), Trộn xâu (1500), Trao đổi thông tin (1900), Sản xuất đồ chơi (2000), Hành trình du lịch (1700)
2014 Mạng truyền thông (1900), Trò chơi với những viên bi (1700), Chọn công việc (2000), Dãy con chung bội hai dài nhất (1600), Con đường Tùng Trúc (1200), Chất lượng dịch vụ (2200)
2015 Chìa khóa mã số (1900), Chia phần (1800), Cắt hình (1500), Kế hoạch cải tổ (1600), Ruộng bậc thang (1600), Cây hoán vị (2300)
2016 Đốn cây (2100), Tạo đề thi (1900), Hậu cần (2400), Mã thẻ công dân (2300), Trại bò tót (2000), SEQ198 (1600)
2017 Trò chơi (1800), Dãy Fibonacci (1600), Đường cao tốc (2400), Tàu điện ngầm (1800), Xâu đối xứng (2000), Virus (1500)
2018 Trò chơi khối hộp (1900), Phần thưởng (1600), Dòng xe vào bến (1700), Robot (1600), Dãy xấp xỉ tăng (2100), Người đặc biệt (1400)
2019 Số siêu đối xứng (2300), Nén xâu (1700), Thiết kế đường điện (2500), Thử nghiệm robot (2500), Năng lượng mặt trời (1400), Tập thể dục (2300)
2020 Phần thưởng (1400), Tòa nhà (1900), Đi xe buýt (2000), Động đất (2200), Giàn đèn (1600), Các chòm sao (2200)
2021 Phần thưởng (2100), Mạng truyền thông (1900), Tặng quà (1600), Phép toán OR (1800), Rút gọn ma trận (2300), Chia nhóm (2300)
2022 Đặc trưng đồ thị (1600), Kết nối internet (2100), Xây dựng ma trận (2500), Phần mềm vẽ (2400), Chọn cặp (1700), Đoạn số (1700)
2023 Chuỗi ADN (1700), Canh tác lương thực (2300), Thu nhập ổn định (1900), Năng lượng tối thiểu (2400), Thiết bị thông minh (2200), Nhà gỗ (1700)
2024 Thu mua nông sản (2500), Cải thiện đánh giá (1800), Mạng truyền tin (2100), Bài tập đêm giáng sinh (2600), Ba đường truyền điện (2200), Sản xuất gỗ (2100)
2025 Vòng tròn (2500), Mã hóa dãy số (2300), Số nguyên dương (2400), Lập trình Robot AI (2200), Người giao hàng (1700), Hai dãy số (2400)
2026 Cắm trại (2600), Quà Noel (2300), Dãy đèn (2400), Cây thông (2200), Bài đăng (2500), Tất niên (2000)
Trang này có hữu ích không? Đăng nhập để trả lời

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0