안녕하세요! Haru_101입니다.
이번에는 2022 제1회 미적확통컵 성료기념으로 개최하면서 얻은 팁이나 그런 것들을 공유하고자 글을 쓰게 되었습니다.
(제 주관적인 생각이 다소 함유되어 있으며, 즉석으로 쓴 글인 점 양해바랍니다 (_ _))
1. 대회 출제자 / 검수자 모집
이 단계가 가장 중요하다고 생각합니다.
대회를 개최하기 전, 자신이 언제 쯤에 대회를 열고, 몇 명의 출제자/검수자를 모집할 지, 대회 문제의 출제 방향 등을 어떻게 할지 미리 정해두고, 출제자 / 검수자 모집시에 이를 명확하게 정리하여 공지하는 것이 중요하다고 생각합니다.
(대략적인 난이도도 정해두는 것이 좋습니다.)
외부검수자 같은 경우 비교적 짧은 기간동안 검수가 진행되므로 외부검수자는 대회 시작 1달전? 쯤, 내부검수자는 출제자 선발시에 같이 뽑는 것이 좋다고 생각합니다.
[나쁜 예]
출제 방향 : 사람이 풀 문제
문제 개수 : 몰라
대회 시작 : 몰라
[좋은 예]
출제 방향 : 미적확통컵은 고등학교 수학 교육과정의 수학I, 수학II, 미적분, 확률과 통계 과목을 주제로 한 문제들로 출제됩니다.
문제 개수 : 12문제
대회 시작 : 12/24 오전 10시
출제자와 검수자를 모집할 때는, "푼 문제가 많으니 이 분을 뽑아야 겠다" 보단, "대회 일정에 맞춰 출제/검수를 하실 수 있으며, 문제에 대한 이해도가 높은 분"을 뽑는 방향이 저는 좋다고 생각합니다.
2. 출제
이제 출제 단계입니다. 이쯤되면 출제자/(내부)검수자가 모집되었을 겁니다.
출제는 "polygon" (https://polygon.codeforces.com/) 을 이용하여 출제하는 것이 좋습니다.

회원가입 후, New Contest에 들어가서 Contest를 하나 만들어줍시다. (문제 폴더를 하나 만든다는 개념으로 이해해주세요.)

대충 이런 형식으로 폼을 채우고 Create 버튼을 눌러줍시다.

만든 Contest에 들어가서 우측 하단의 Manage developers list를 눌러줍니다.

Change list에서 한줄마다 "출제/검수진" 분들의 "polygon" ID를 입력해주세요. 그런다음 Access를 WRITE로 설정한 후, 아래의 Change developers list를 눌러줍시다.

이제 문제를 만들어 봅시다. New problem을 누른 후, 문제의 대략적인 이름을 입력해주세요.

이제 다시 자신이 만든 Contest에 들어가면 입력한 이름으로 된 문제가 하나 생기게 됩니다.
우측 Actions에서 Start를 눌러줍시다.

문제의 메인화면입니다. 이제 하나씩 살펴보도록 하죠. (이 글에서는 제가 다뤄본 것들만 설명하겠습니다.)
General Info
문제의 기본 정보를 입력하는 곳입니다.
Time limit : 시간제한을 설정 (ms)
Memory limit : 메모리제한을 설정(MB)
Tags : 문제의 태그 설정(ex. math, graph,...)
Statement
이 부분부터는 실제 제가 만든 문제를 바탕으로 설명하겠습니다.

Name: 문제 이름
Legend: 문제 본문
Input format: 입력 형식 (입력 설명)
Output format: 출력 형식 (출력 설명)
Notes: 힌트
Tutorial: 예제 정답이 나오는 과정 설명 등
수식은 LaTeX 문법에 맞추어 작성해야합니다. 수식은 달러 표시로 묶어서 작성해주세요.
Checker

Select: 유저가 제출한 코드에서 출력한 정답을 읽을 때 어떤 형식으로 읽어올 지 정하는 부분입니다.
스페셜저지 같은 경우 따로 스페셜저지 코드를 작성해서 넣어야 합니다. 그렇지 않은 경우에는 저 Select에서 선택하는 것이 편합니다.
저장은 Set checker로 저장해주세요.
Tests

채점용 데이터를 편집하는 부분입니다.
(입력시 확장자 : *.in 출력 : *.out)
Preview Tests : generator(데이터 생성 코드)로 생성된 데이터들을 볼 수 있고, 그 데이터에 대한 정답을 보여줍니다.

정답을 출력하는 코드는 화면 우측 Solutions에서 Main Correct Solution을 추가해야 합니다.
(Main Correct Solution이 아닌 Correct에서 되는지는 안해봐서 모르겠습니다 (추후수정))

Preview Tests를 실행한 후의 모습입니다.
Add Test

Test # : 데이터의 번호입니다. (1부터 시작)
Group : 데이터들을 그룹으로 묶을 때, 그 그룹의 이름을 적어주면 됩니다.
(Ex. Hard, Easy)
Type:
Manual - 수동으로 데이터를 추가
Script - 스크립트로 데이터를 추가 (generator 사용)
Data: Manual일경우 입력데이터를 수동으로 입력, Script일경우 스크립트를 입력 (스크립트는 추후 설명)
Use in statements : 문제의 예제로 추가할지 설정
Description : 데이터에 관한 설명 추가 (문제 지문에선 보이지 않음)
Generator
추후 서술
Stresses

Stresses는 정해코드들로 입력 데이터들에서 찾지 못한 반례를 찾아줍니다.
Run All Stresses : 추가한 Stresses를 모두 실행합니다.
Add Stress : Stress를 추가해줍니다.

Script Pattern : Generator(입력데이터 생성기)가 있을 경우 스크립트를 입력해줍니다.
Memory limit, Time limit (말그대로)
Total time limit : Stress가 몇초동안 돌아갈지 정하는 부분입니다.
Solutions : Stress에 이용할 코드들을 체크해주면 됩니다.
Innovacations

Innovacations는 각각의 데이터들에 대해 체크한 코드들의 정/오답 여부 + 시간초과나 메모리초과등의 데이터 별로 상태를 알려줍니다.

Want to run solutions?를 입력하면 다음과 같이 보입니다.

Innovacation을 실행한 후 나오는 결과입니다. TL이나 OK 옆에 뜨는 X / Y는 시간을 X ms, 메모리를 Y MB 소모했다는 뜻입니다.
(여기서부터는 추후 서술)
'BOJ' 카테고리의 다른 글
| BOJ 27172 - 수 나누기 게임 (0) | 2023.06.30 |
|---|---|
| BOJ 1715 - 카드 정렬하기 (0) | 2023.06.29 |
| BOJ 12095 가장 오래 걸리는 스도쿠 (0) | 2022.05.02 |
| [C++] BOJ 1735 - 분수 합 (0) | 2022.04.09 |
| [C++] BOJ 17114 - 하이퍼 토마토 (0) | 2022.04.04 |