yclock   1년 전

@baekjoon 님 안녕하세요. 저는 BOJ로 PS를 공부하는 한 학생입니다.

BOJ는 다른 Online Judge와는 다르게 굉장히 많은 기능을 제공하고 있습니다. 아마 현존하는 OJ 중에서 채점이 쾌적하고, 데이터 추가가 활발하게 이루어지며, Subtask 형식까지 지원하는 곳은, BOJ가 유일하지 않을까 싶습니다.

다만 예전부터 BOJ에 있어 아쉬웠던 점이 하나 있습니다. Interactive 형식의 문제를 지원하지 않는다는 것입니다.

(i) IOI처럼 grader.cpp를 제공하고 사용자는 main함수를 작성하지 않는 "Grader Interactive" 형식이나,

(ii) Codeforces처럼 사용자가 main함수를 작성하되, standard input/output을 통하여 jury와 통신하는 "Pipe Interactive",

두 가지 형식 중 하나를 지원해주시면 감사하겠습니다.

바쁘신 와중에 긴 글 읽어주셔서 감사합니다. BOJ :fan:


P.S. Two Steps 형식도 해주세요...

P.S.2. Distributed Google Code Jam 은 무리겠죠...(?)

P.S.3. (My Score) / (Best Score of submissions) 같은 점수 계산도 읍읍...!

startlink   1년 전

안타깝게도 @baekjoon님이 Interactive 문제가 없던 시기에 올림피아드에 출전해서 이게 어떤 문제인지 정확하게 모릅니다. 전에 어떤 분이 설명을 해줘서 대충은 아는데, 일단 문제를 풀어본 적이 없어서 잘 모릅니다.

서브태스크가 대회를 통해서 생긴 기능인만큼, Interactive를 사용하는 대회가 열린다면 그 때부터 아마도 지원할 것 같습니다.

추가로, Two Steps 형식이 어떤 형식인지 잘 모르겠습니다. 2번도 DGCJ에 참가해본 적이 없어서 뭔지 잘 모릅니다. 3번은 생각만 몇 년째 하고 있습니다.

startlink   13일 전

@yclock님 덕분에 (i)을 지원할 수 있게 되었습니다.

https://www.acmicpc.net/board/...

빠른 시일 내에 (ii)도 지원할 예정입니다.

startlink   13일 전

Two Steps 형식 설명해주세요

yclock   13일 전

Two Step 형식은 사용자가 두 개의 소스 코드를 제출하는 방식을 의미합니다.

예를 들어, 다음과 같은 문제를 생각합시다: 두 명의 사람 Anna와 Bruno가 있습니다. Anna는 하나의 제곱수 x2(0 <= x2 <= 1018)가 적힌 종이를 들고 있습니다. Anna는 Bruno에게 자신이 들고 있는 종이에 적힌 제곱수 x2를 알려주고 싶습니다. 하지만 기술 상의 문제로, Anna는 Bruno에게 109 이하의 음이 아닌 정수 하나만 전달할 수 있습니다. Bruno에게 제곱수 x2를 전달하는 프로그램을 작성하시오.

이 문제의 경우, Anna는 Bruno에게 제곱수 x2를 그대로 전달할 수 없습니다. 다만, 그의 제곱근 x를 전달한다면, Anna는 수를 전달할 수 있고, Bruno는 제곱근을 통하여 다시 제곱수를 얻어낼 수 있습니다.

Two Step 형식으로 이 문제가 나온다면, 사용자는 "Anna.cpp"와 "Bruno.cpp"를 구현해야 할 것입니다. 또한 "grader.cpp"와 "Anna.h", "Bruno.h"가 제공될 것입니다.

Grader는 "Anna.h"에서는 함수 void giveNumber(int n)를 지원해야 합니다. 이는 Anna.cpp에서 Anna가 Bruno에게 수 n을 전달하는 함수입니다.

Grader는 "Bruno.h"에서는 함수 void answer(long long int n)를 지원해야 합니다. 이는 Bruno.cpp에서 Bruno가 Anna의 수 x2을 n라고 예상하였다고 알려주는 함수입니다.

===========

채점은 다음과 같은 과정으로 이루어 집니다.

Anna.cpp와 Bruno.cpp가 서로 변수를 공유하거나 통신하는 일이 일어나면 안 되기 때문에, 다음과 같이 복잡한 과정으로 채점이 이루어지는 것으로 압니다. (아마도..?)

1. Grader_Anna.cpp와 Anna.cpp가 컴파일되어 실행됩니다. Anna가 Bruno에게 알려줄 수 n을 얻어냅니다.

2. Grader_Bruno.cpp와 Bruno.cpp가 컴파일되어 실행됩니다. Bruno에게, Anna가 줬던 수 n을 줍니다. Bruno가 답을 맞추는 지 관찰(?)합니다.

3. 이 문제의 경우, Anna와 Bruno가 Interaction하지 않았습니다. 하지만, 몇몇 Two Step 문제들은 두 소스 코드가 Grader를 통하여 Interaction 하기도 합니다. 고로, Anna와 컴파일된 Grader_Anna, Bruno와 컴파일 된 Grader_Bruno는 서로 pipe 등을 통하여 소통할 수 있어야 합니다.

다만, 위와 같이 복잡한 채점 과정이 일어남과 다르게, 사용자가 테스트를 위하여 사용하는 grader.cpp는 단일 파일로, Anna.cpp와 Bruno.cpp가 같이 컴파일 될 수 있도록 합니다.

===========

이상입니다. 감사합니다.

댓글을 작성하려면 로그인해야 합니다.