Skip to content

Các định dạng kỳ thi

LCOJ hỗ trợ 6 định dạng kỳ thi: Default, IOI, Legacy IOI, ECOO, AtCoder, và ICPC.

Default (Mặc định)

Định dạng chuẩn, đơn giản nhất.

Cách tính điểm:

  • Điểm = Tổng điểm cao nhất của mỗi bài
  • Phá tie: Thời gian bài nộp cuối cùng có điểm

Lưu ý: Mọi bài nộp đều tăng thời gian penalty, kể cả bài không tăng điểm.

Cấu hình: Không có tùy chọn đặc biệt.

Ví dụ:

Thí sinhBài ABài BBài CTổng điểmThời gian
Alice100 (10p)80 (25p)60 (40p)24040p
Bob100 (15p)80 (20p)60 (35p)24035p

Bob thắng vì thời gian ít hơn.

IOI

Định dạng của Olympic Tin học Quốc tế.

Cách tính điểm:

  • Mỗi bài có nhiều subtask
  • Điểm subtask = Điểm cao nhất của subtask đó trong tất cả bài nộp
  • Điểm bài = Tổng điểm các subtask
  • Điểm tổng = Tổng điểm các bài
  • Mặc định không phá tie

Ví dụ:

Bài A có 2 subtask (30 điểm và 70 điểm):

Bài nộpSubtask 1Subtask 2Tổng
Lần 1301040
Lần 207070
Điểm cuối3070100

Tùy chọn:

json
{
  "cumtime": true
}

Nếu cumtime: true, phá tie bằng tổng thời gian của bài nộp đầu tiên pass mỗi subtask.

Legacy IOI

Định dạng của Codechef IOI Ranklist.

Cách tính điểm:

  • Điểm = Tổng điểm cao nhất của mỗi bài
  • Mặc định không phá tie

Tùy chọn:

json
{
  "cumtime": true
}

Nếu cumtime: true, phá tie bằng tổng thời gian của bài nộp thay đổi điểm gần nhất.

ECOO

Định dạng của kỳ thi ECOO.

Cách tính điểm:

  • Điểm = Tổng điểm của bài nộp cuối cùng mỗi bài
  • Mặc định không phá tie

Tùy chọn:

json
{
  "cumtime": true,
  "first_ac_bonus": 10,
  "time_bonus": 5
}

first_ac_bonus: Điểm thưởng nếu AC ngay lần đầu (mặc định 10).

time_bonus: Điểm thưởng theo thời gian. Cứ mỗi time_bonus phút trước khi kết thúc, được thêm 1 điểm (mặc định 5).

Ví dụ time_bonus:

  • Bài nộp được 50/100 điểm
  • Nộp lúc còn 23 phút
  • Bonus = ⌊23/5⌋ = 4 điểm
  • Tổng = 50 + 4 = 54 điểm

AtCoder

Định dạng của AtCoder.

Cách tính điểm:

  • Điểm = Tổng điểm cao nhất của mỗi bài
  • Phá tie: Thời gian bài nộp cuối thay đổi điểm + penalty

Penalty:

json
{
  "penalty": 5
}

Penalty = Số bài nộp sai trước bài đúng × penalty phút (mặc định 5).

Ví dụ:

Bài A:

  • Nộp lần 1 (5p): 0 điểm
  • Nộp lần 2 (10p): 0 điểm
  • Nộp lần 3 (15p): 100 điểm

Penalty = 2 × 5 = 10 phút

Thời gian = 15 + 10 = 25 phút

ICPC

Định dạng của ACM-ICPC.

Cách tính điểm:

  • Điểm = Số bài AC
  • Phá tie 1: Tổng thời gian + penalty
  • Phá tie 2: Thời gian bài nộp cuối thay đổi điểm

Penalty:

json
{
  "penalty": 20
}

Penalty = Số bài nộp sai trước bài AC × penalty phút (mặc định 20).

Ví dụ:

BàiThời gian ACSố lần saiPenaltyThời gian tổng
A10p0010p
B25p240p65p
C50p120p70p

Tổng: 3 bài, 145 phút

So sánh các định dạng

Định dạngĐiểmPhá tiePenaltyPhù hợp
DefaultTổng điểm cao nhấtThời gian cuốiMọi bài nộpKỳ thi thông thường
IOITổng điểm subtaskKhôngKhôngOlympic, có subtask
Legacy IOITổng điểm cao nhấtTùy chọnKhôngTương tự IOI
ECOOĐiểm bài cuốiTùy chọnCó bonusKỳ thi ECOO
AtCoderTổng điểm cao nhấtThời gian + penaltyBài saiKỳ thi AtCoder
ICPCSố bài ACThời gian + penaltyBài saiACM-ICPC

Cách chọn định dạng

Default: Phù hợp nhất cho kỳ thi thông thường, dễ hiểu.

IOI: Dùng khi bài có subtask rõ ràng, muốn thí sinh được điểm từng phần.

ICPC: Dùng khi muốn tập trung vào số bài AC, không quan trọng điểm từng phần.

AtCoder: Cân bằng giữa điểm và thời gian, có penalty nhẹ.

ECOO: Có tính năng đặc biệt như bonus AC đầu tiên, bonus thời gian.

Cấu hình trong Admin

  1. Vào trang tạo/sửa contest
  2. Chọn Contest format
  3. Nhập JSON config nếu cần (ví dụ: {"cumtime": true, "penalty": 10})
  4. Lưu

Ví dụ config:

json
{
  "cumtime": true,
  "penalty": 10,
  "first_ac_bonus": 15,
  "time_bonus": 3
}