• VNOJ
  • Trang chủ
  • Danh sách bài
  • Các bài nộp
  • Thành viên
    >
    • Tổ chức
  • Các kỳ thi
  • Wiki
  • Thông tin
    >
    • FAQ
    • Trình chấm ngoài
    • Tag
    • Máy chấm
    • Devlog
    • Github
    • Tickets
    • Thư viện đề thi
    • Đề xuất contest
  • Tạp chí
VI EN Đăng nhập  hoặc  Đăng ký

Chào mừng bạn đến với VNOI Online Judge!

VNOJ - VNOI Online Judge là hệ thống online judge open source chính thức của VNOI, dựa trên nền tảng của hệ thống DMOJ.

VNOJ được tạo ra với mục đích xây dựng một môi trường luyện tập và cạnh tranh dành cho cộng đồng Tin Học Việt Nam. VNOJ là một hệ thống chấm bài tự động hoàn toàn độc lập của VNOI và là bước tiến tiếp theo trong quá trình di dời và nâng cấp VOJ.

Hiện nay, hệ thống VNOJ đã đưa trở lại kho bài tập rộng lớn từ hệ thống cũ VOJ (bao gồm các đề thi Học Sinh Giỏi Quốc Gia, ACM-ICPC, ... qua các năm). Kho bài tập này sẽ được cập nhật thường xuyên với những bài tập mới từ các kì thi, trong đó có những kì thi luyện tập trên VNOJ và những đề thi chính thức của VNOI.

Nếu đây là lần đầu tiên tham gia VNOJ, hãy đăng ký tài khoản. Sau đó, thử bài tập A cộng B.

  • Blog
  • Sự kiện
  • Tin tức
  • Blog

3

Sàng nguyên tố

PhuocThien đã đăng vào 11, Tháng 2, 2026, 2:18

* Sàng nguyên tố Eratosthenes (Sieve of Eratosthenes)

Hướng tiếp cận Ban đầu, ta cho tất cả các số từ 2 đến n vào sàng và đánh dấu tất cả các số. (Các số không được đánh dấu sau cùng sẽ bị loại khỏi sàng). Duyệt lần lượt các số từ 2 đến n. Nếu số đang xét:

Đã được đánh dấu

⇒ số nguyên tố: ta bỏ đánh dấu tất cả các bội (khác chính nó) của số nguyên tố này để loại các bội ấy ra khỏi sàng.

Không được đánh dấu

⇒ hợp số: ta bỏ qua số này. Sau khi duyệt xong, các số còn lại trong sàng, hay nói cách khác các số được đánh dấu là số nguyên tố.

Ta có thể hiểu như hình dưới đây:

Code C++ minh họa

const int maxn = 1000000 + 5; //10^6 + 5
bool is_prime[maxn]; // mảng bool khởi tạo với các giá trị false  
void sieve(int n){
    // Đánh dấu các số từ 2 đến n đều là số nguyên tố
    for (int i = 2; i <= n; i++)
        is_prime[i] = true;
    for (int i = 2; i <= n; i++) {
        if (is_prime[i]) {
            for (int j = i * 2; j <= n; j += i)
            // Bỏ đánh dấu tất cả các số không phải số nguyên tố
                is_prime[j] = false;
        }
    }
}

Độ phức tạp thời gian là O(n*(1/2+1/3+...+1/p) với p là số nguyên tố <= n.

Độ phức tạp thời gian là O(n log log n)

Đô phức tạp không gian là O(n)

Dựa vào Nhận xét trên, ta có cải tiến như sau:

CODE MẪU :

const int maxn = 1000000 + 5; //10^6 + 5
bool is_prime[maxn];
void Eratosthenes(int n){
    for (int i = 2; i <= n; i++)
        is_prime[i] = true;
    for (int i = 2; i * i <= n; i++) {
        if (is_prime[i]) {
            // j sẽ bắt đầu chạy từ i * i
            for (int j = i * i; j <= n; j += i)
                is_prime[j] = false;
        }
    }
}

Độ phức tạp thời gian vẫn vậy.Tuy nhiên, số phép tính đã giảm đi đáng kể.

>> link hướng dẫn chi tiết về sàng nguyên tố

PhuocThien
o11, Tháng 2, 2026, 2:18 0

-3

SIUU

PhuocTri đã đăng vào 29, Tháng 1, 2026, 14:30

112

PhuocTri
o29, Tháng 1, 2026, 14:30 0

-2

Em rất xin lỗi mọi người

pika68267 đã đăng vào 25, Tháng 1, 2026, 0:06

(em xin phep de tieng anh vi em ko bat telex duoc) many month ago, i have making a huge mess by making a war and disrespect everyone in the discord server today, i am very regret of my behaviour and want to sorry everyone:

  • sorry to the moderator of my bad behaviour
  • sorry to kuroni and lekienthanh for ragebaiting them( even if i don't mean like that) I can't control everyone but i hope no one will get offended by my mistake and hope that everyone will forgive me, even it is late to say
pika68267
o25, Tháng 1, 2026, 0:06 0

2

CP Algorithms Tiếng Việt :))))))))))

deanqkhanh đã đăng vào 21, Tháng 1, 2026, 2:57

🚀 CP-Algorithms Tiếng Việt: Phá Bỏ Rào Cản Ngôn Ngữ Trong Lập Trình Thi Đấu

Nếu bạn là một người đam mê thuật toán, chắc hẳn cái tên e-maxx hay CP-Algorithms đã quá quen thuộc. Đây là kho tàng kiến thức đồ sộ, nơi chứa đựng mọi thứ từ những thuật toán cơ bản đến những cấu trúc dữ liệu nâng cao nhất.

Tuy nhiên, việc tiếp cận bằng tiếng Anh đôi khi là một trở ngại lớn khiến nhiều bạn trẻ Việt Nam khó tiếp thu trọn vẹn tinh túy của bài viết. Đó chính là lý do dự án CP-Algorithms Tiếng Việt ra đời!

🌟 Tại sao bạn không nên bỏ lỡ trang web này?

Dự án không chỉ đơn thuần là dịch thuật, mà còn là nỗ lực mang lại trải nghiệm học tập gần gũi nhất cho cộng đồng Coder Việt:

  • Nội dung chuẩn xác: Các thuật toán được chuyển ngữ tỉ mỉ, giữ đúng thuật ngữ chuyên ngành nhưng vẫn đảm bảo sự dễ hiểu.
  • Đầy đủ mã nguồn: Giữ nguyên các đoạn code mẫu tối ưu, giúp bạn có thể thực hành ngay lập tức.
  • Hoàn toàn miễn phí: Truy cập mọi lúc, mọi nơi trên nền tảng GitHub Pages mượt mà.
📚 Bạn sẽ học được gì?

Từ những bước chân đầu tiên cho đến khi chinh phục các kỳ thi Olympic (VOI) hay kỳ thi quốc tế (ICPC), trang web bao hàm tất cả:

Chủ đề Nội dung nổi bật
Số học GCD/LCM, Số nguyên tố, Nghịch đảo modulo...
Quy hoạch động Các kỹ thuật tối ưu hóa QHĐ kinh điển.
Đồ thị DFS/BFS, Dijkstra, Luồng cực đại (Flow)...
Cấu trúc dữ liệu Segment Tree, Fenwick Tree, Treap...
Xử lý chuỗi KMP, Z-algorithm, Suffix Array...
🤝 Cùng nhau xây dựng cộng đồng

Đây là một dự án mở. Nếu bạn yêu thích thuật toán và muốn đóng góp cho cộng đồng, bạn hoàn toàn có thể tham gia hiệu đính hoặc dịch các bài viết mới. Mỗi đóng góp của bạn đều giúp lộ trình học tập của các thế hệ Coder Việt sau này trở nên bằng phẳng hơn.

Ghé thăm ngay tại: https://deanqkhanhcoder.github.io/cp-algorithms-vi/

Hãy chia sẻ bài viết này đến bạn bè và cùng nhau nâng tầm tư duy thuật toán của người Việt nhé! 🔥

deanqkhanh
o21, Tháng 1, 2026, 2:57 0

28

VNOI Wiki: Tham lam

dvtd đã đăng vào 17, Tháng 1, 2026, 3:23

🖐️ Xin chào các bạn, trong số lần này, VNOI Wiki xin giới thiệu đến các bạn bài viết về Thuật toán tham lam (Greedy Algorithm) - một trong những tư duy thuật toán quan trọng và là một chủ đề cực kỳ phổ biến trong giải thuật và lập trình.

🔗 Link bài viết: VNOI Wiki | Tham lam

✍️ Biên soạn: Nguyễn Hoàng Dương dnx04 - Trường Đại học Công nghệ, ĐHQGHN

✅ Reviewers:

  • Nguyễn Minh Nhật minhnhatnoe - Georgia Institute of Technology
  • Nguyễn Tấn Minh unknownnaciul - Trường Đại học Khoa học Tự nhiên, ĐHQG-HCM

  • Võ Đức Đoàn KAKOII - THPT Chuyên Nguyễn Tất Thành, Quãng Ngãi

💖 VNOI chân thành cảm ơn đội ngũ Admin và TNV đã không ngừng đóng góp, biên soạn và hoàn thiện kho tri thức thuật toán chất lượng cao cho cộng đồng.

dvtd
o17, Tháng 1, 2026, 3:23 1

-4

giải K-dominant Subarray

HaDat_Python đã đăng vào 3, Tháng 1, 2026, 11:06

include <bits></bits>

using namespace std;

int main(){ ios::syncwithstdio(false); cin.tie(nullptr);

int N, K;
cin >> N >> K;
vector<long long> a(N);
for(int i = 0; i < N; i++) cin >> a[i];

unordered_map<long long, vector<int>> pos;
pos.reserve(N * 2);

for(int i = 0; i < N; i++)
    pos[a[i]].push_back(i + 1);

long long ans = 0;

for(auto &p : pos){
    auto &v = p.second;
    int t = v.size();
    if(t < K) continue;

    for(int i = 0; i + K - 1 < t; i++){
        for(int j = i + K - 1; j < t; j++){
            int c = j - i + 1;
            int maxLen = 2 * c - 1;

            int Lmin = v[j] - maxLen + 1;
            int Lmax = v[i];

            int Rmin = v[j];
            int Rmax = v[i] + maxLen - 1;

            Lmin = max(Lmin, 1);
            Lmax = min(Lmax, v[i]);

            Rmin = max(Rmin, v[j]);
            Rmax = min(Rmax, N);

            if(Lmin > Lmax || Rmin > Rmax) continue;

            long long total = 1LL * (Lmax - Lmin + 1) * (Rmax - Rmin + 1);
            ans += total;
        }
    }
}

cout << ans;

}

HaDat_Python
o3, Tháng 1, 2026, 11:06 0

-1

K-Dominant Subarray

HaDat_Python đã đăng vào 3, Tháng 1, 2026, 11:02

Cho mảng gồm 𝑁 N số nguyên dương 𝐴 1 , 𝐴 2 , … , 𝐴 𝑁 A 1 ​

,A 2 ​

,…,A N ​

và một số nguyên 𝐾 K.

Một đoạn con liên tiếp [ 𝐿 , 𝑅 ] [L,R] được gọi là K-dominant nếu tồn tại một giá trị 𝑋 X sao cho:

số lần xuất hiện của 𝑋 X trong đoạn lớn hơn tổng số lần xuất hiện của tất cả các giá trị khác trong đoạn (tức là 𝑓 𝑟 𝑒 𝑞 ( 𝑋 ) > ( 𝑅 − 𝐿 + 1 ) − 𝑓 𝑟 𝑒 𝑞 ( 𝑋 ) freq(X)>(R−L+1)−freq(X))

và đồng thời 𝑓 𝑟 𝑒 𝑞 ( 𝑋 ) ≥ 𝐾 freq(X)≥K.

Hãy đếm số lượng đoạn con K-dominant.

Ràng buộc:

1 ≤ 𝑁 ≤ 2 × 10 5 1≤N≤2×10 5

1 ≤ 𝐴 𝑖 ≤ 10 9 1≤A i ​

≤10 9

1 ≤ 𝐾 ≤ 𝑁 1≤K≤N

Input:

N K A1 A2 ... AN

Output: In ra một số nguyên là số đoạn con K-dominant.

Ví dụ:

Input 6 2 1 2 2 2 3 2

Output 7

HaDat_Python
o3, Tháng 1, 2026, 11:02 0

-3

hello

SoMotThanhXuan đã đăng vào 22, Tháng 12, 2025, 2:40

downvote toi di

SoMotThanhXuan
o22, Tháng 12, 2025, 2:40 1

36

VNOI Wiki: Kỹ thuật sinh test

dvtd đã đăng vào 21, Tháng 12, 2025, 4:56

🖐️ Xin chào các bạn, trong bài viết lần này, VNOI Wiki xin giới thiệu đến các bạn nội dung về Kỹ thuật sinh test. Đây là kỹ năng thực chiến quan trọng trong mọi kỳ thi, giúp bạn chủ động phát hiện những lỗi sai mà test ví dụ thường bỏ sót, đồng thời kiểm soát chặt chẽ thời gian chạy của thuật toán trong trường hợp xấu nhất.

💻 Bài viết hệ thống hóa toàn bộ kiến thức về Kỹ thuật sinh test, trải dài từ tư duy lý thuyết đến ứng dụng thực tiễn, bao gồm:

  • Vai trò của sinh test trong việc phát hiện lỗi và kiểm soát thời gian chạy trong các kỳ thi Offline/Online, đặc biệt là tại kỳ thi Học sinh giỏi Quốc gia môn Tin học sắp tới.

  • Phương pháp xây dựng Code "trâu", Code chuẩn và Generator hiệu quả.

  • Kỹ thuật sinh test random hiệu quả, đo thời gian chạy và template trình chấm tự động.

🔗 Link bài viết: Kỹ thuật sinh test, tự kiểm tra code | VNOI Wiki

✍️ Biên soạn: Nguyễn Quang Minh minhcool - Michigan State University.

✅ Reviewers:

  • Lê Minh Hoàng Monarchuwu - Trường Đại học Khoa học Tự nhiên, ĐHQG-HCM.
  • Võ Đức Đoàn KAKOII - THPT Chuyên Nguyễn Tất Thành, Quảng Ngãi.

  • Nguyễn Tiến Mạnh ngtmanh - Đại học Bách khoa Hà Nội.

  • Nguyễn Tấn Minh unknownnaciul - Trường Đại học Khoa học Tự nhiên, ĐHQG-HCM.

💖 VNOI xin cảm ơn đội ngũ TNV và Admin đã dành tâm huyết hoàn thiện nội dung này. Mong rằng các bạn sẽ nắm vững và vận dụng thành thạo kỹ thuật sinh test trong quá trình luyện tập. Đừng quên theo dõi VNOI để đón đọc những bài viết tiếp theo nhé!

✨ Chúc các bạn ôn luyện hiệu quả và đạt kết quả cao nhất trong kỳ thi HSGQG sắp tới!

dvtd
o21, Tháng 12, 2025, 4:56 2

1

Chủ đề sinh test

MnhatBeo đã đăng vào 20, Tháng 12, 2025, 15:14

Mẹo sinh test cực nhanh

Bình thường các bạn làm bài như nào thì cứ làm như thế(tạo project xog add INP và OUT rồi làm)
Khi muốn sinh test và so sánh code trâu và code full thì tạo 1 folder mới
- Tạo file main_trau.cpp và dán code trâu vào
- Tạo file main.cpp và dán code full vào
- Tạo file test.cpp và code sinh test(có thể đọc ở dưới blog của tôi)
Sử dụng lệnh cmd để build file cpp ra exe:
** ĐỂ CHẠY NHANH THÌ CÁC BẠN COPY HẾT CẢ 3 DÒNG VÀ CLICK CHUỘT PHẢI VÀO CMD, KHÔNG PHẢI COPY TỪNG DÒNG 1 VÀ CHẠY TỪNG LỆNH 1

g++ test.cpp -o test
g++ main.cpp -o main
g++ main_trau.cpp -o main_trau

Cuối cùng là chạy test.exe
MnhatBeo
o20, Tháng 12, 2025, 15:14 2
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • ...
  • 35
  • 36
  • »

Top thành viên

# Tên truy cập Rating
1
fextivity
3236
2
hollwo_pelw
2806
3
minhcool
2800
4
Hollowed
2785
5
marvinthang
2759
Tổ chức Xem đầy đủ >>>

Top đóng góp

# Tên truy cập Đóng góp
1
dquynh_2811
1451
2
I_love_Hoang_Yen
646
3
Mike4235
582
4
ntkwan
578
5
PhuocThien
539
Xem đầy đủ >>>

Dòng bình luận Discord

  • lamson1999dmx → Trồng hoa
  • ijk → VM 08 Bài 03 - Đếm đường đi trên đồ thị đầy đủ
  • TranThienPhuc2657 → Bedao Regular Contest 23 - Super Six Seven
  • haiduong2110 → VM 10 Bài 03 - Tô màu
  • haiduong2110 → VM 14 Bài 19 - Sudoku
  • tranductrongvip12411 → HSG THPT Hải Phòng 2023 - Bài 3
  • TranThienPhuc2657 → Mountain Walking
  • TranThienPhuc2657 → Bedao Regular Contest 19 - Chênh lệch lớn nhất
  • deanqkhanh → Free Contest 125 - GCDARR
  • EnderBoy_CC → ICPC 2022 vòng Regional - G: Goal-line Technology
RSS / Atom

Bài mới

  • VOI 26 Bài 6 - Cắm trại
  • VOI 26 Bài 5 - Cây thông
  • VOI 26 Bài 4 - Tất niên
  • VOI 26 Bài 3 - Bài đăng
  • VOI 26 Bài 2 - Quà Noel
  • VOI 26 Bài 1 - Dãy đèn
  • Bedao Mini Contest 27 - Mạng rễ cổ thụ
RSS / Atom

dựa trên nền tảng DMOJ | theo dõi VNOI trên Github và Facebook