• ACOJ
  • Trang chủ
  • Problems
  • Submissions
  • Users
  • Contests
  • About
    >
    • Status
  • Live IDE
Đăng nhập  hoặc  Đăng ký

  • Bài đăng
  • Sự kiện

Tin tức

🚀 ACOJ Live IDE

đã đăng vào 25 tháng 2 năm 2026, 2:22 p.m. 0

Code, chạy thử, debug — tất cả ngay trên trình duyệt.

ACOJ Live IDE là môi trường lập trình trực tuyến được thiết kế dành riêng cho competitive programming. Không cần cài đặt, không cần setup — mở trình duyệt và bắt đầu code.


🖥️ Ngôn ngữ hỗ trợ

C++ 17 · C · Python 3 · PyPy 3 · Java · Go


✨ Tính năng chính

▶ Chạy code trực tiếp

Viết code, nhập input và nhấn Run để xem kết quả ngay lập tức. Hiển thị đầy đủ output, stderr, thời gian chạy và bộ nhớ sử dụng.

📋 15+ Code Templates có sẵn

Chọn nhanh các template thuật toán phổ biến: DSU, Segment Tree, BIT, Trie, Sparse Table, BFS, DFS, Dijkstra, Topological Sort, Binary Search, Modular Arithmetic, Sieve, Matrix Exponentiation và các boilerplate CP chuẩn.

🧪 Multiple Test Cases

Tạo tối đa 10 test cases cho mỗi tab. Chạy từng test hoặc Run All để kiểm tra tất cả cùng lúc. Mỗi test case hiển thị trạng thái ✅ AC hoặc ❌ Error riêng biệt.

✅ Expected Output & Auto Diff

Nhập expected output cho từng test case. Sau khi chạy, IDE tự động so sánh từng dòng và hiển thị:

  • ✓ Match — output khớp hoàn toàn
  • ✗ Diff — highlight dòng sai, hiện rõ dòng expected bên cạnh
🎨 Format Code tự động

Một nút bấm để format code đẹp theo chuẩn: clang-format cho C/C++/Java, Black cho Python, gofmt cho Go.

📑 Multi-tab Editor

Mở tối đa 10 tab cùng lúc. Đổi tên tab bằng double-click. Mỗi tab lưu riêng ngôn ngữ, code và test cases.

🔗 Share Code

Chia sẻ code qua link. Người nhận mở link sẽ thấy code, input, output — sẵn sàng fork và chỉnh sửa.

💾 Auto Save & Download

Code được tự động lưu vào trình duyệt — đóng tab rồi mở lại vẫn còn nguyên. Nhấn Download để tải file về máy với đúng extension (.cpp, .py, .java, .go).

🔤 Autocomplete & IntelliSense

Gợi ý keyword, STL functions, #include headers khi gõ. Hỗ trợ đầy đủ cho C++, Python, Java và Go.

🌙 Dark / Light Theme

Chuyển đổi giữa giao diện tối và sáng. IDE ghi nhớ lựa chọn của bạn.

↔️ Resize Panel

Kéo thả thanh chia giữa editor và panel test case để điều chỉnh kích thước theo ý muốn.

🔠 Font Size linh hoạt

Tăng giảm cỡ chữ bằng nút +/− hoặc phím tắt. Cài đặt được lưu lại cho lần sau.


⌨️ Phím tắt

Phím tắt Chức năng
Ctrl + Enter Chạy test case hiện tại
Ctrl + Shift + Enter Chạy tất cả test cases
Ctrl + Shift + F Format code
Ctrl + S Lưu ngay
Ctrl + = / Ctrl + - Tăng / Giảm cỡ chữ

🏁 Bắt đầu ngay

Truy cập Live IDE và code thôi!

Giới thiệu Group trên Facebook

đã đăng vào 31 tháng 3 năm 2025, 1:04 p.m. 0

👨‍💻 Giới thiệu cộng đồng ACOJ – Hỏi đáp & Luyện tập lập trình

ACOJ là một nền tảng hỗ trợ học sinh, sinh viên luyện tập và thi đấu các bài lập trình thuật toán bằng C++/Python, hướng đến các kỳ thi như:

🏅 Học sinh giỏi Tin học cấp Tỉnh, Quốc Gia

🏆 Olympic Tin học Sinh viên (OLP), ICPC

💡 Các cuộc thi thuật toán, contest luyện tập định kỳ

Luyện tập với hàng trăm bài tập có chấm điểm tự động

Thảo luận, hỏi đáp và chia sẻ kinh nghiệm cùng cộng đồng trên Facebook

🔗 Group Facebook chính thức: 👉 ACOJ – Hỏi đáp & Luyện tập lập trình

🔥TỔNG KẾT CUỘC ĐUA VÒNG 3–4–5 & SIÊU CÚP 🔥

đã đăng vào 9 tháng 8 năm 2025, 9:04 p.m. 0

🔥 TỔNG KẾT CUỘC ĐUA VÒNG 3–4–5 & SIÊU CÚP 🔥

Ba vòng đấu nghẹt thở đã khép lại, và cuộc chiến Siêu Cúp vừa rồi thực sự nảy lửa! 💥 Hãy cùng điểm lại bảng vàng thành tích:

🏁 Kết quả từng vòng

  • Vòng 3: 🥇 Thái · 🥈 Minh · 🥉 deptrai
  • Vòng 4: 🥇 Luân · 🥈 Thái · 🥉 Minh
  • Vòng 5: 🥇 Luân · 🥈 Thái · 🥉 deptrai

💰 Mỗi vòng thưởng: 🥇 50k · 🥈 30k · 🥉 20k

💵 Sau 3 vòng, BXH tạm thời: 1️⃣ Thái — 110k 2️⃣ Luân — 100k 3️⃣ Minh — 50k 4️⃣ deptrai — 40k


🏆 SIÊU CÚP — Đỉnh cao của đỉnh cao 🥇 deptrai — 100k (lội ngược dòng ngoạn mục!) 🥈 Thái — 50k

⚡ Kỷ lục “lời giải nhanh nhất”

  • deptrai — 10k (Bài C)
  • Luân — 20k (Bài E, G)
  • Hạo — 10k (Bài A)
  • santafe — 10k (Bài F)

💎 TỔNG THƯỞNG CHUNG CUỘC 👑 Thái — 160k 🔥 deptrai — 150k ⚡ Luân — 120k ⭐ Minh — 50k 🎯 Hạo — 10k 🚀 santafe — 10k


💬 Một mùa thi đấu bùng nổ cảm xúc! Từ những cú nước rút siêu tốc, pha bứt phá ngoạn mục cho tới các màn “chốt hạ” đầy kịch tính. 📦 BTC sẽ tổng hợp và gửi thưởng ngay trong tuần này. 💪 Hẹn tái đấu ở mùa sau, khi những huyền thoại mới sẽ lên ngôi! ✨

Cheatsheet C++

đã đăng vào 31 tháng 3 năm 2025, 11:38 p.m. 0

Hướng dẫn sử dụng mt19937 và mt19937_64 trong C++

📌 Mục tiêu

  • Giải thích cách sử dụng bộ sinh số ngẫu nhiên chất lượng cao trong C++
  • Phân biệt mt19937 (32-bit) và mt19937_64 (64-bit)
  • Hướng dẫn sinh số ngẫu nhiên, số trong khoảng, số thực, mảng ngẫu nhiên

🧠 Tổng quan

mt19937 và mt19937_64 là gì?
  • Là bộ sinh số ngẫu nhiên dựa trên thuật toán Mersenne Twister.
  • mt19937: sinh số nguyên 32-bit (unsigned int).
  • mt19937_64: sinh số nguyên 64-bit (unsigned long long).
  • Chu kỳ rất dài, phân phối đồng đều, dùng nhiều trong lập trình thi đấu và mô phỏng.

🔧 Code mẫu cơ bản

#include <bits/stdc++.h>
using namespace std;

mt19937 rng32(time(0));         // Sinh số ngẫu nhiên 32-bit
mt19937_64 rng64(time(0));      // Sinh số ngẫu nhiên 64-bit

int main() {
    cout << "random 32 (bit): " << rng32() << endl;
    cout << "random 64 (bit): " << rng64() << endl;
}

📘 C++ Hash Map Cheatsheet: map, unordered_map, gp_hash_table

1. std::map

  • Dạng: Cây đỏ-đen (Red-Black Tree)
  • Tự động sắp xếp theo key
  • Độ phức tạp: O(log n) cho các thao tác chèn, tìm kiếm, xóa
#include <bits/stdc++.h>
using namespace std;

unordered_map<int, int> um;

int main() {
    map<int, int> mp;
    mp[1] = 100;
    if (mp.count(1)) {
        cout << mp[1];  // Output: 100
    }
}

✅ Ưu điểm:

  • Sắp xếp theo key
  • Ổn định

❌ Nhược điểm:

  • Chậm hơn unordered_map hoặc gp_hash_table với dữ liệu ngẫu nhiên

2. std::unordered_map

  • Dạng: Hash Table chuẩn
  • Không sắp xếp theo key
  • Độ phức tạp trung bình: O(1) (xấu nhất O(n))

🛠 Tip: Tăng hiệu năng bằng reserve() khi biết trước số phần tử:

#include <bits/stdc++.h>
using namespace std;

unordered_map<int, int> um;

int main() {
    um.reserve(1000000);
    um[3] = 3;
    cout << um[3];
}

3. __gnu_pbds::gp_hash_table

  • Cấu trúc dữ liệu thay thế unordered_map với hiệu suất cao hơn
  • Cần include đặc biệt:
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using namespace std;

int main() {
    gp_hash_table<int, int> m;
    m[3] = 1;
    cout << m[3];
}

✅ Ưu điểm:

  • Rất nhanh cho dữ liệu ngẫu nhiên
  • Ít bị đụng độ hash

❌ Nhược điểm:

  • Không tương thích với Clang
  • Không có trong chuẩn STL, chỉ dùng trên GCC (như Codeforces)

4. So sánh hiệu suất

Dữ liệu std::map unordered_map gp_hash_table
Tìm kiếm log(n) Trung bình O(1) Nhanh hơn O(1)
Bộ nhớ Cao Thấp - TB Tối ưu tốt
Dữ liệu ngẫu nhiên Chậm TB - có thể bị tệ Rất tốt
Hỗ trợ Clang ✔️ ✔️ ❌

5. Một số tối ưu khi dùng unordered_map

unordered_map<int, int> um;
um.reserve(1 << 20);              // Dự phòng bộ nhớ
um.max_load_factor(0.25);        // Giảm load factor để tránh đụng độ hash

6. Khi nào dùng cái nào?

Trường hợp Cấu trúc phù hợp
Cần sắp xếp key std::map
Tìm kiếm nhanh, không cần sắp xếp unordered_map
Dữ liệu ngẫu nhiên lớn, cần tốc độ gp_hash_table (nếu dùng GCC)

7. Bài tập áp dụng

  • Bedao Grand Contest 10 - PERFECT
  • Atcoder ABC250E - Prefix Equality
  • Hackerrank - Number Game on a Tree
  • Codeforces 1175F - The Number of Subpermutations
  • Codeforces 1418G - Three Occurrences

📌 Ghi chú

  • Với test ngẫu nhiên lớn, gp_hash_table thường vượt trội về thời gian và bộ nhớ.
  • Nếu không dùng được gp_hash_table, bạn có thể thử tùy biến unordered_map bằng cách tự viết hàm hash.
struct custom_hash {
    size_t operator()(uint64_t x) const {
        return x ^ (x >> 16);
    }
};
unordered_map<uint64_t, int, custom_hash> safe_map;

📘 C++ Cheatsheet: vector 1 chiều & 2 chiều

1. vector 1 chiều

🔹 Khai báo
vector<int> a;                // Vector rỗng
vector<int> b(5);             // Vector 5 phần tử, giá trị mặc định = 0
vector<int> c(5, -1);         // Vector 5 phần tử, mỗi phần tử = -1
🔹 Truy cập phần tử
a[0], a.at(0);               // Truy cập phần tử đầu tiên
a.front();                   // Phần tử đầu
a.back();                    // Phần tử cuối
🔹 Thêm / Xóa phần tử
a.push_back(10);             // Thêm vào cuối
a.pop_back();                // Xóa phần tử cuối
a.insert(a.begin() + 2, 100);// Chèn 100 tại vị trí thứ 2
a.erase(a.begin() + 1);      // Xóa phần tử tại vị trí thứ 1
🔹 Duyệt
for (int x : a) cout << x;
for (int i = 0; i < a.size(); ++i) cout << a[i];
🔹 Resize & Clear
a.resize(10);                // Thay đổi kích thước thành 10 phần tử
a.clear();                   // Xóa toàn bộ phần tử
🔹 Gán
a = vector<int>(5, 7);       // Gán lại vector a thành 5 phần tử = 7
a.assign(3, 100);            // Gán 3 phần tử bằng 100

2. vector 2 chiều

🔹 Khai báo
int n = 3, m = 4;
vector<vector<int>> mat(n, vector<int>(m));          // ma trận n x m, mặc định 0
vector<vector<int>> mat2(n, vector<int>(m, -1));     // ma trận n x m, mỗi phần tử = -1
🔹 Truy cập & Duyệt
mat[i][j];                    // Truy cập phần tử hàng i, cột j

for (int i = 0; i < n; ++i)
    for (int j = 0; j < m; ++j)
        cout << mat[i][j];
🔹 Resize sau khai báo
vector<vector<int>> mat;
mat.resize(n, vector<int>(m, 0));   // Resize thành n x m, tất cả = 0
🔹 Gán lại toàn bộ
mat.assign(n, vector<int>(m, 1));  // Gán lại ma trận n x m toàn bộ = 1

3. Một số mẹo

  • Duyệt nhanh:

    for (auto &row : mat)
      for (auto x : row)
          cout << x << " ";
    
  • Xoay chiều ma trận:

    vector<vector<int>> rotate90(const vector<vector<int>>& mat) {
      int n = mat.size(), m = mat[0].size();
      vector<vector<int>> res(m, vector<int>(n));
      for (int i = 0; i < n; ++i)
          for (int j = 0; j < m; ++j)
              res[j][n - 1 - i] = mat[i][j];
      return res;
    }
    

🔚 Tổng kết

Tác vụ Cú pháp
Khởi tạo vector<int> v(n, val);
Resize v.resize(new_size);
Gán toàn bộ v.assign(n, val);
Vector 2D vector<vector<int>> mat(n, vector<int>(m));
Xóa v.clear();
Truy cập v[i], mat[i][j]
Duyệt for (int x : v) hoặc for (auto x : row)

Cuộc thi đang diễn ra

HSG THPT - TP. Cần Thơ 2024
Kết thúc trong 3 ngày 02:48:02.
Tổng hợp đề thi Olympic 30/4 (K10 & K11)
Kết thúc trong 62 ngày 02:48:02.
HSG THPT - TP. Cần Thơ 2025
Kết thúc trong 17 ngày 02:48:02.

Dòng bình luận

  • ThunQT → HSG9 - An Giang (2023) - Bài 1
  • ThunQT → HSG9 - An Giang (2023) - Bài 1
  • L1ght → HSG THCS - Cần Thơ 2025
  • Nguoingu45 → Bài 1. Wow
  • Nguoingu45 → Nhận dạng chữ số ngày Quốc khánh 2/9
  • nguyen_ho_hoang_thai → Kỳ thi chọn vào đội tuyển VOI - Vòng 1
  • nguoila123 → Cakes (Tin học trẻ KV miền Nam 2025)
  • nhan0123456 → Hội thao học sinh (Olympic 30/4 K10- 2025)
  • Kngan → HSG THCS - Cần Thơ 2025
  • triile → HSG9 - Ninh Bình (2023)
RSS / Atom

Đề bài mới

  • Bài 1. Tổng phân số (HSG THPT Khánh Hòa 2026)
  • Bài 2. Dãy tăng liên tiếp (HSG THPT Khánh Hòa 2026)
  • Bài 3. Chia phần (HSG THPT Khánh Hòa 2026)
  • Bài 4. Mảnh đất trồng cây (HSG THPT Khánh Hòa 2026)
  • Bài 1. Dãy số (HSG THPT Phú Thọ 2026)
  • Bài 2. Đếm số nguyên tố (HSG THPT Phú Thọ 2026)
  • Bài 3. Xâu con dài nhất (HSG THPT Phú Thọ 2026)
RSS / Atom

dựa trên nền tảng DMOJ |