Hướng dẫn sử dụng CTOJ


📘 Trung tâm hướng dẫn

Mọi thứ bạn cần để học, dạy và vận hành hệ thống chấm bài trực tuyến CTOJ · MathX — chọn vai trò của bạn hoặc gõ từ khóa để tìm nhanh.

Mục lục

🚀Bắt đầu nhanh

Năm phút để làm quen và nộp bài đầu tiên.

  1. Đăng nhập bằng tài khoản giáo viên cấp (hoặc tự đăng ký). Quên mật khẩu? Bấm Quên mật khẩu ở trang đăng nhập — thư đặt lại sẽ gửi về email của bạn (xem cả mục Spam).
  2. Điểm danh mỗi ngày bằng nút ở góc trái dưới màn hình để giữ chuỗi 🔥 và nhận điểm chuyên cần.
  3. Mở Danh sách bài, chọn bài có nhãn Dễ để khởi động — hoặc làm 📅 Bài tập hôm nay trên trang chủ.
  4. Bấm ▶ Chạy thử trong IDE trên trang đề, viết code, chạy với các ví dụ cho tới khi khớp.
  5. Bấm ✔ Nộp bài ngay trong IDE và xem kết quả chấm.
📱
Cài CTOJ như ứng dụng trên điện thoại: mở trang bằng Chrome → menu ⋮ → Thêm vào màn hình chính / Cài đặt ứng dụng. Trên iPhone (Safari): nút Chia sẻ → Thêm vào MH chính.

📝Đọc đề và nộp bài

Mỗi bài có đề, giới hạn thời gian/bộ nhớ, ví dụ và nhãn độ khó.

Nhãn độ khó

Dễ Trung bình Khó Rất khó — tính tự động theo tỉ lệ học sinh giải được (cập nhật hằng tuần, cần ít nhất 10 bạn đã thử).

Ngôn ngữ

Dùng C++17 hoặc Python 3. Đọc dữ liệu từ bàn phím (cin, input()) và in ra màn hình, không in thêm lời nhắc như “Nhap n:”.

Bài nhập/xuất qua file

Một số bài yêu cầu đọc MÃBÀI.INP và ghi MÃBÀI.OUT (đề sẽ ghi rõ). Dùng mẫu dưới để code chạy được cả trong IDE lẫn khi chấm (trong IDE gõ fileio rồi Enter để chèn nhanh):

// C++
if (fopen("PA0012.INP", "r")) {
    freopen("PA0012.INP", "r", stdin);
    freopen("PA0012.OUT", "w", stdout);
}
# Python
import os, sys
if os.path.exists("PA0012.INP"):
    sys.stdin = open("PA0012.INP"); sys.stdout = open("PA0012.OUT", "w")
⚠️
Tên file phải viết đúng chữ hoa như đề bài. Sai tên file thường dẫn tới kết quả hoặc IR.

✅Đọc kết quả chấm

Kết quảÝ nghĩaNên làm gì
ACĐúng tất cả testTuyệt! Xem nhận xét AI hoặc lời giải tham khảo (nếu có).
Sai kết quả ở ít nhất một testThử trường hợp biên: n nhỏ nhất/lớn nhất, số âm, tràn số (dùng long long).
TLEChạy quá thời gianGiảm độ phức tạp thuật toán; C++ thêm nhập xuất nhanh.
MLEDùng quá bộ nhớGiảm kích thước mảng, tránh lưu dữ liệu không cần.
RELỗi khi chạyTruy cập ngoài mảng, chia cho 0, đệ quy quá sâu.
CELỗi biên dịchMở bài nộp để xem dòng lỗi, hoặc chạy trong IDE.
IRChương trình trả mã lỗi khác 0C++ nhớ return 0;; kiểm tra tên file.

💻IDE chạy thử (kiểu VS Code)

Viết, chạy thử, so sánh kết quả và nộp bài ở cùng một nơi — mở từ menu IDE hoặc nút ▶ Chạy thử trong IDE trên trang đề.

🧪 Nhiều testcaseVí dụ trong đề được nạp sẵn; bấm + Thêm test để tự tạo test riêng (được lưu lại).
⚖️ Tự so sánhĐiền “Output mong đợi” — IDE báo khớp/sai và chỉ ra dòng khác đầu tiên; nút So sánh từng dòng mở bảng đối chiếu.
🔴 Lỗi theo dòngLỗi biên dịch được gạch đỏ ngay trong code; bấm lỗi trong tab Lỗi để nhảy tới dòng.
✨ Gợi ý & snippetGõ fori, readarr, bfs, dsu, sieve, fileio… rồi Enter.
✔ Nộp trực tiếpNút Nộp bài gửi code đang viết và chuyển tới kết quả chấm.
💾 Tự lưuCode lưu trên trình duyệt theo từng bài, từng ngôn ngữ.

Phím tắt

Chạy test đang chọnCtrl+EnterChạy tất cả testCtrl+Shift+Enter
Nộp bàiCtrl+Shift+SBảng lệnhF1
Gợi ý codeCtrl+SpaceChú thích dòngCtrl+/
Nhiều con trỏCtrl+DDi chuyển dòngAlt+↑/↓
Tìm / thay thếCtrl+F / HToàn màn hìnhF11
ℹ️
Mỗi lần chạy tối đa 2 giây, 256 MB; cách nhau 3 giây; tối đa 300 lần/ngày (“Chạy tất cả” tính là 1 lần). Chạy thử không tính là nộp bài. Bánh răng ⚙ để đổi giao diện sáng/tối, cỡ chữ, minimap.

🤖Trợ lý AI

  • “Vì sao sai?” — trong IDE, khi bị sai output/lỗi chạy/lỗi biên dịch, bấm nút 🤖 để AI chỉ ra nguyên nhân có khả năng nhất, gợi ý hướng sửa và test nên thử. AI không viết lời giải cho bạn.
  • Nhận xét bài làm — sau khi AC, bạn có thể nhờ AI phân tích thuật toán, độ phức tạp và cách cải tiến.
  • Lời giải tham khảo — với bài có lời giải AI, lời giải chỉ mở sau khi bạn đã AC.
🔒
Mọi tính năng AI tự khóa với bài đang nằm trong kỳ thi chưa kết thúc. AI có thể nhầm — hãy luôn kiểm chứng bằng cách chạy test.

🔥Chuyên cần, danh hiệu và huy hiệu

Hoạt độngĐiểm chuyên cần
Điểm danh mỗi ngày+3
Chuỗi điểm danh đủ mỗi 7 ngày+10 thưởng
AC một bài lần đầu+5 (Dễ) · +8 (Trung bình) · +12 (Khó) · +15 (Rất khó)
📅 AC bài tập hôm nay trong ngày+10
🎓 Hoàn thành một lộ trình học+50 (mặc định)
Không hoạt động 30 ngày (khi đã có từ 100 điểm)−7 mỗi tuần

Danh hiệu theo tổng điểm

Tập sự (0) → Chuyên cần (100) → Bền bỉ (200) → Kiên trì (500) → Tinh anh (1000) → Bậc thầy (2500) → Đại sư (5000) → Huyền thoại (10000).

Huy hiệu & thống kê

Có hơn 40 huy hiệu chia 6 nhóm: Giải bài, Thói quen & chuyên cần, Say mê học tập (⚡ Ngày miệt mài, 💪 Không bỏ cuộc, 🧩 Ham khám phá…), Danh hiệu (mỗi lần lên danh hiệu chuyên cần), Thử thách & kỳ thi (🌟 top 10, 🏆 top 3 chuyên cần) và Vui (🦉 Cú đêm…). Xem tiến độ, bản đồ hoạt động 12 tháng, thống kê theo độ khó/chủ đề và gợi ý bài tiếp theo tại Thành tích của tôi (biểu tượng 🏅 ở góc trái dưới). Bảng xếp hạng chuyên cần: /chuyen-can/.

🧭Lộ trình học và bài tập hôm nay

  • Lộ trình học (menu Lộ trình): học theo chặng từ dễ đến khó. Xong khoảng 70% một chặng sẽ mở chặng sau; nút ▶ Tiếp tục dẫn tới bài kế tiếp chưa làm.
  • 📅 Bài tập hôm nay: mỗi ngày một bài được chọn sẵn (thẻ trên trang chủ). AC trong ngày được +10 điểm.

🏫Lớp học và bài tập về nhà

  1. Giáo viên thêm bạn vào lớp (tổ chức) của mình.
  2. Bộ bài tập của lớp xuất hiện trong Các kỳ thi với thời gian mở và hạn nộp. Mở bộ bài, tham gia rồi làm từng bài.
  3. Trước hạn khoảng một ngày, nếu chưa xong bạn sẽ nhận email nhắc liệt kê các bài còn thiếu.

✉️Email nhắc học

CTOJ có thể gửi: 🔥 nhắc giữ chuỗi (19h30 khi hôm nay chưa điểm danh), ⏰ nhắc bài tập lớp sắp hết hạn, 📊 báo cáo tuần (tối Chủ nhật — cần tự bật). Chọn loại thư muốn nhận tại Tùy chọn email; mỗi thư đều có nút hủy nhận.

💬Bảng xếp hạng, blog và bình luận

  • Thành viên: xếp hạng theo điểm; chỉ hiện các bạn đã AC từ 3 bài.
  • Blog: khi đã giải đủ số bài yêu cầu, bạn có thể viết bài chia sẻ (cần quản trị duyệt).
  • Bình luận dưới đề để hỏi về đề bài — không đăng code lời giải.

❓Hỏi đáp nhanh

Chạy đúng ví dụ nhưng nộp bị WA?

Test chấm lớn và đa dạng hơn ví dụ. Kiểm tra tràn số, trường hợp biên, định dạng output (khoảng trắng, xuống dòng). Thử nút 🤖 trong IDE với một test tự nghĩ ra.

Không thấy nút Điểm danh?

Nút chỉ hiện khi đã đăng nhập, ở góc trái dưới. Đã điểm danh thì nút đổi thành chuỗi 🔥 và điểm của bạn.

IDE báo “Bạn chạy hơi nhanh”?

Mỗi lần chạy cách nhau 3 giây. Dùng “Chạy tất cả” để chạy nhiều test một lần.

Mất code trong IDE?

Code lưu trên trình duyệt của máy đó. Dùng nút ⬇ để tải về máy, hoặc mở bài nộp cũ để lấy lại code.

🧑‍🏫Quyền giáo viên

Quản trị viên cấp cho giáo viên: quyền vào trang quản trị (/admin/), quyền sửa bài, và vị trí quản trị tổ chức (lớp) mà giáo viên phụ trách. Trang quản trị có nút ← Về trang chính và màu đồng bộ với trang chính.

🏫Lớp học và giao bài tập

  1. Mở menu Lớp học → Tạo bộ bài. Chọn lớp (tổ chức bạn quản trị), đặt tên, thời gian mở và hạn nộp.
  2. Nhập mã bài theo thứ tự, ngăn cách bằng dấu cách/dấu phẩy/xuống dòng (tối đa 30 bài, mỗi bài 100 điểm). Được dùng bài công khai hoặc bài riêng mà bạn có quyền sửa.
  3. Trang báo cáo của bộ bài cho xem tiến độ từng học sinh; tại đây có thể đổi hạn nộp và thêm bài vào cuối bộ bài.
  4. Bộ bài chỉ hiện với thành viên lớp. Học sinh chưa xong sẽ tự nhận email nhắc khoảng 1 ngày trước hạn.
💡
Muốn bớt bài khỏi bộ bài, sửa trong trang quản trị kỳ thi tương ứng (mã bắt đầu bằng ctoj_hw_).

📚Soạn đề và dữ liệu test

  1. Quản trị → Problems → Thêm: mã bài, tên, đề (Markdown), giới hạn thời gian/bộ nhớ, ngôn ngữ cho phép. Viết ví dụ trong khối ``` theo cặp input rồi output — IDE sẽ tự nạp làm test mẫu.
  2. Trang đề → Sửa dữ liệu test: tải file .zip chứa các cặp test (vd. 1.inp/1.out…), bấm nhận diện test rồi Lưu.
  3. Nhập/xuất qua file: ở danh sách bài trong trang quản trị, tick các bài → ô Action chọn bật nhập xuất file (MÃBÀI.INP/.OUT) hoặc trả về nhập xuất chuẩn → Go.
  4. Nộp thử lời giải chuẩn để kiểm tra trước khi công khai bài.
🤖
CTOJ AI Studio (/ai/): mô tả yêu cầu, AI soạn đề kèm lời giải C++/Python, sinh test và tự kiểm chứng bằng lời giải vét cạn trước khi bạn duyệt đăng.

📊Độ khó bài

Nhãn độ khó tính lại mỗi Chủ nhật theo tỉ lệ học sinh AC (≥70% Dễ, ≥40% Trung bình, ≥20% Khó, còn lại Rất khó; cần từ 10 học sinh đã thử). Muốn đặt tay: Quản trị → CTOJ Chuyên cần → Độ khó bài, chọn mức và tick Khóa để hệ thống không tự đổi.

🧭Tạo lộ trình học

  1. Quản trị → CTOJ Thành tích → Lộ trình học → Thêm: tên, biểu tượng (emoji), giới thiệu, % để mở chặng sau (0 = mở hết), điểm thưởng khi hoàn thành.
  2. Thêm các chặng: tên, kiến thức cần nắm và danh sách mã bài theo thứ tự (hệ thống báo ngay mã bài sai).
  3. Tick Hiển thị để học sinh thấy ở menu Lộ trình. Lộ trình mẫu “Khởi động lập trình” có sẵn để tham khảo, sửa tùy ý.

📅Bài tập mỗi ngày

Hệ thống tự chọn một bài công khai mỗi ngày (T2 Dễ, T3 TB, T4 Dễ, T5 TB, T6 Dễ, T7 Khó, CN TB; không lặp trong 120 ngày). Muốn chọn trước: Quản trị → Bài tập mỗi ngày → Thêm, nhập ngày, bài và điểm thưởng.

👀Theo dõi học sinh

  • Thống kê từng học sinh: /thanh-tich/tên-đăng-nhập/ — hoạt động 12 tháng, bài theo độ khó/chủ đề, huy hiệu, bài AC gần đây.
  • Báo cáo bộ bài trong mục Lớp học; bảng chuyên cần tại /chuyen-can/.
  • Điều chỉnh điểm chuyên cần thủ công: Quản trị → Điểm chuyên cần → Thêm (điểm âm để trừ).
  • Lịch sử email đã gửi: Quản trị → Email đã gửi.

🏆Kỳ thi và tính công bằng

  • Khi bài thuộc một kỳ thi đang diễn ra, mọi tính năng AI của học sinh với bài đó tự khóa (giáo viên vẫn dùng được).
  • IDE vẫn cho chạy thử (như Codeforces) — chỉ chạy với test học sinh tự nhập, không lộ test chấm.
  • Chế độ xem test sau khi chấm đặt ở từng bài: trường Testcase visibility trong trang sửa bài.
Không tìm thấy nội dung phù hợp. Thử từ khóa khác hoặc hỏi giáo viên của bạn.
CTOJ · MathX — cần hỗ trợ thêm, hãy liên hệ giáo viên phụ trách hoặc quản trị viên.