Polygon

4. Statement

Evenharder 2015. 7. 28. 09:47

Statement는 문제의 내용를 기술해놓는 곳입니다. 문제의 기술은 이미 General Info에서 하지 않았느냐고 말할 수 있겠지만, Statement에서는 TeX을 통해서 기술해야 한다는 점이 가장 큰 차이점입니다.


일단 TeX에 관한 설명은 뒤로 미루고 본문으로 들어가겠습니다. Statement 탭에 들어가면, 아직 하나도 만든 것이 없기에 다음과 같은 화면이 나타납니다.



언어를 하나 선택해야 하는데요, 기본적으로는 English와 Russian이 권장됩니다(언어 선택 탭을 누를 시 그 둘이 맨 위에 있는데는 이유가 있습니다. 기본적으로 Codeforces Round에서 그 두 언어만 공식적으로 지원하기 때문입니다). 개인적으로는 유니코드 충돌 문제 같은 것을 방지하기 위해 English를 우선시하며, 개발자분께서 아시아 언어는 자동으로 TeX으로 바꾸는 것이 어렵다는 을 올리신 바 있기 때문에 Korean은 접어두시길 바랍니다.


그럼 English를 선택하고 들어가겠습니다. 그러면 다음과 같은 화면이 나타납니다.




우선 위의 파란 탭부터 설명하겠습니다.


  • English: English statement로 이동하겠다는 하이퍼링크입니다. 다른 언어의 statement를 추가하면 그것도 역시 추가됩니다.

  • Review: 문제를 Codeforces 형식에 맞추어 html로 표시함과 동시에, 나중에 만들 Validator 코드 본문을 표시합니다.

  • Delete Current: 현재 statement를 삭제합니다.

  • Create New: 새로운 statement를 만듭니다. 참고로 statement는 언어별로 중복이 불가합니다.


그 밑의 3개의 하이퍼링크는 다음과 같습니다.


  • In LaTeX: 정해진 양식에 따라서 적어놓은 Statement와 General Info에서 적어놓은 입출력 방식, Time/Memory Limit이 포함된 LaTeX 파일 그 자체을 평문으로 보여줍니다.

  • In HTML: 역시 정해진 양식에 따라서 변환하나, 차이점은 html로 보여준다는 것입니다. 때문에 LaTeX에서 보이던 것과는 달리 보일 수 있습니다(특히 줄바꿈).

  • In PDF: 사실상 이 기능이 제일 중요합니다. 위에 있는 LaTeX 파일을 기본으로 하여 pdf 파일을 만들어냅니다. Statement는 결국 이 pdf 파일을 만드는 것이 목표입니다.


본문으로 들어가서 각 항목을 설명하자면 다음과 같습니다.


  • Encoding: 문제의 인코딩 설정입니다. 기본으로 설정되어 있는 UTF-8을 사용하시길 권장합니다.

  • Name: 문제의 제목입니다. Polygon에 저장되어 있는 문제 이름과는 달리 풀 네임으로 적으시면 되겠습니다.

  • Legend: 보통 전설이라는 뜻을 가지고 있지만, 여기서는 전문이라는 뜻을 가지고 있습니다. 문제의 기본적인 이야기를 적는 칸입니다. 다만 중요한 점은 이해가 잘 되게 써야 한다는 것이겠죠. 안 그러면 욕을 먹으니......

  • Input format: 입력 양식을 입력하는 곳입니다(ex. 첫째 줄에 정수 n이 입력됩니다. 그 이후 n개의 줄에 걸쳐 어쩌구 저쩌구)

  • Output format: 출력 양식을 입력하는 곳입니다.

  • Note: 추가 사항, 예를 들면 입출력 예제(이는 나중에 Tests에서 자동으로 추가됩니다)의 작동 방식을 설명한다든지를 적어놓으면 됩니다. 얼마나 구체적으로 적을지는 본인의 재량입니다.

  • Tutorial: Codeforces의 Editorial입니다. 문제의 풀이를 적으시면 되겠습니다. 풀이의 양 역시 본인의 재량입니다. 풀이를 자세히 설명할 것인지, 아이디어만 설명하며 끝낼 것인지......본인의 선택입니다. 고로 Tutorial 칸에 무엇이든, 입력하고 저장하면 3개의 하이퍼링크가 있던 곳 옆에 추가적으로 2개의 하이퍼링크(Tutorial in HTML, Tutorial in PDF)가 생깁니다. 역할은 말 그대로입니다.


여기까지 입력한 것들은 창 맨 밑에 있는 Save 버튼을 통해서 저장이 가능합니다. 


밑에 있는 Statement Resource Files는 옆의 Add File을 통해, 혹시 Statement에 그림 등이 들어가야 할 때 추가적인 파일을 올리는 장소입니다. 다만 여기에 올리는 파일은 다음과 같은 문자만 허용됩니다.

  • 알파벳 소문자 및 대문자

  • 숫자

  • .(Period, 0x2E)

  • _(Underscore, 0x5F)

  • -(Hyphen, 0x2D)


이 이외의 문자는 Illegal filename specified 라고 표기되며, 업로드가 거부됩니다. 이는 다른 파일을 업로드할 때도 마찬가지로 적용됩니다.


이제 TeX로 약간의 편집을 할 차례입니다. TeX은 일종의 조판 프로그램으로, 여려 명령어들을 이용해서 구조적인 글을 써 나가는 프로그램입니다. 주로 논문 등의 형식을 요구하는 것에 쓰입니다. TeX과 관련된 기초적인 지식은 구글링을 하시기 바랍니다. 사실 TeX은 그 명령어가 너무 많아, 궁금한 게 있으면 일단 구글링해야 합니다. 아무튼 본 블로그는 TeX에 관한 포스팅을 하는 곳이 아니므로, 간략한 팁 및 사용방법만 몇 가지 이야기하겠습니다.

  • 우선 TeX에서는 줄바꿈이 Enter를 친다 해서 바로 적용되지 않습니다. 줄바꿈 문자는 \\입니다. 그 이외에도 빈 줄 하나를 놓으면 줄바꿈이 이루어지지만, 빈 줄을 여러개 놓아도 줄바꿈은 한 번밖에 이루어지지 않습니다.

  • TeX에서는 일반적인 편집 모드(textmode)와 수식 편집 모드(mathmode)가 따로 있습니다. 일반적인 모드는 plain text를 입력할 때 사용하며, 수식 편집 모드는 흔히 이탤릭체로 표시되는 수식을 표현할 때 사용합니다.

  • 일부 특수 기호는 \를 앞에 붙여야 사용가능한 경우가 있습니다. 다만 일부 특수 기호는 수식 편집 모드에서만 사용 가능한 경우가 있습니다.
    (ex. _를 출력하려면 \_를 입력해야 합니다)

  • 그러한 특수 기호들은 이 사이트에서 직접 그려보면서 확인할 수 있습니다.

  • 수식 편집 모드에 접근하는 방법은 간단히 2가지가 있습니다. 첫번째는 $ 수식 내용 $의 형태입니다. 이 경우 $ 안에 있는 내용이 수식 편집 모드가 적용됩니다. 또다른 방법으로는 $$ 수식 내용 $$의 형태가 있습니다. 이 경우 $$ 안에 있는 내용이 가운데 정렬이 되며, 자동으로 줄바꿈을 해줍니다.

  • 수식 편집 모드에서 사용할 수 있는 주요 구문 중의 하나가 첨자입니다. 윗 첨자는 ^, 아랫첨자는 _로 연결합니다.

  • 그림 첨부는 다음과 같은 구문을 넣으면 해결할 수 있습니다. 그림이 'picture.jpg'라는 이름을 가지고 있을 때(jpg, bmp, png 등의 확장자들이 적용됩니다)


  • \begin{figure}[h]

    \begin{center}

    \includegraphics[scale=0.5,bb=0 0 501 75]{statement_create.jpg}

    \end{center}

    \end{figure}

    이를 설명하자면 다음과 같습니다.

    • \begin{figure}: 이것이 float한 figure라는 것을 의미합니다. float을 간단히 설명하자면 '페이지에 걸쳐서 나타나지 않는 것'입니다.

    • \begin{center}: \end{center}가 있는 곳까지 가운데 정렬을 하라는 의미입니다. \includegraphics: 여러 옵션을 사용하여 그림 등을 나타내는 함수입니다. [] 안에는 많은 것들이 들어갈 수 있지만, 여기서는 2개만 사용하도록 하겠습니다.

      • scale: 그림의 배율입니다. 0.5라는 것은 가로와 세로를 0.5배로 하라는 것입니다.

      • bb: BoundingBox라는 개념인데, 이 옵션은 Polygon 특유의 문제로 반드시 포함해야 합니다. 안 그러면 에러가 납니다. 일반적으로는 bb=0 0 'scale이 적용된 그림의 가로 크기' 'scale이 적용된 그림의 세로 크기'를 적습니다.

    • {}: 안에는 당연히 그림의 이름을 그대로 적어넣으면 됩니다. 기본적으로 ASCII 코드 인식 가능하지만 일단 Polygon에 파일을 올리려면 그렇게 해야 하기에 별 문제는 되지 않습니다.

  • TeX을 알고 계시는 분이라면, 각 항목을 편집할 때 \usepackage 같은 정의 헤더는 사용할 필요가 없으며, 사용해서도 안 된다는 것을 알려드립니다. 그리고 은근 많은 구문들이 사용 불가능하다는 것 역시 숙지하시길 바랍니다(ex. \begin{enumerate}, \textbf}.

그 외에 다양한 것들은 직접 구글링하시길 바랍니다. TeX도 은근 복잡하기 때문에......예시를 들자면 다음과 같습니다.

The first line contains a single integer $q\ (1 \leq q \leq 80,000)$, the number of the binomial coefficients Kevin wants to calculate with the mentioned function, C(int n, int r).\\
The following $q$ lines contain two integers $n\ (0 \leq n \leq 80,000)$ and $r\ (0 \leq r \leq n)$, separated with a single blank. The values $n$ and $r$ are the input values of the function, C(int n, int r).


이를 Statement의 Input format에 넣으면 다음과 같이 나타납니다.



\leq 등이 부등호로 대체된 것을 알 수 있습니다. 아무튼 이런 식으로 Statement를 기술하면 됩니다.