Polygon

10. Solution Files

Evenharder 2015. 8. 12. 00:38

문제의 input을 만드는 generator와, input이 합당한지 확인하는 validator를 만들었으니, 이제 input을 토대로 답을 내는 solution을 올릴 차례입니다. Solution files 탭에 가면 다음과 같은 화면이 우리를 반겨줍니다.



Add soultion을 누르면 자주 봐왔던 파일 업로드 창이 보이며 여기에 업로드할 때도 파일명에 사용할 수 있는 문자들은 다음과 같습니다.

  • 알파벳 소문자 및 대문자

  • 숫자

  • .(Period, 0x2E)

  • _(Underscore, 0x5F)

  • -(Hyphen, 0x2D)

이런 식으로 파일을 선택하고, Language를 선택해서 올리면 solution이 추가됩니다. 


밑에 있는 'Check solutions for compilability'는 solution이 컴파일 가능한지 확인하는 버튼입니다.

표에 있는 문구들의 의미를 하나씩 해석하면 다음과 같습니다.

  • Author: 해당 solution을 업로드한 사람입니다. 혼자 하면 자신의 id가 나타나겠지만 Polygon의 문제는 타인과 공유가 가능하다는 사실을 잊지 마세요.

  • Name: solution의 이름입니다. Rename을 통해서 이름을 바꿀 수 있습니다.

  • Language: solution의 언어입니다.

  • Length: solution의 크기(용량)입니다. 참고로 Codeforces의 상한은 64kB입니다.

  • Modified: 최근 수정 날짜를 의미합니다.

  • Type: soultion이 어떤 종류의 풀이인지를 의미합니다. 창을 보면 8가지 중 하나를 선택해야 합니다. 이 Type는 나중에 Invocation이라는 것을 할 때 매우 중요해집니다.

    • Main correct solution: 일명 'jury's solution'입니다. 기본적으로 '맞는 풀이' 중 하나이나, 이 풀이는 Codeforces의 Hack이나, Checker 등을 통한 test에 대해 답을 출력하는데 사용됩니다. Main correct solution은 한 문제에 하나만 있을 수 있습니다.

    • Correct: 그냥 맞는 풀이입니다.

    • Incorrect: 여러 가지로 틀린 풀이입니다. 이 경우 test에 따라서 Runtime Error가 날 수도 있고, Time Limit Exceeded가 날 수도 있고, Wrong answer가 날 수도 있고, 맞을 수도 있고......

    • Time limit exceeded: 알고리즘은 맞는데 문제가 요구하는 것에 비해 느린 풀이를 의미합니다.

    • Wrong answer: 답이 틀린 풀이입니다.

    • Presentation error: 이 경우는 whitespace 관련해서 output이 이상한 경우입니다. 예를 들면 정수 2개를 공백으로 구분해서 출력하라고 했는데 줄바꿈을 하여 출력한다든지......일부 Online judge에는 있는 것 같지만, 일단 Codeforces에는 Presentation error verdict가 현재로서는 없습니다. 사실 옛날 초기 Codeforces에는 있었습니다만, 이 링크를 보면 폐지했습니다. 뭐 굳이 쓰자면 checker에서 검증할 수도 있겠습니다만......추천하지는 않습니다.

    • Memory limit exceeded: 문제에서 주어진 메모리보다 더 많은 메모리를 사용한 것을 의미합니다. 예시로는 배열의 크기가 너무 크거나(이 때는 컴파일이 거부되는 경우도 있습니다), std 컨테이너에 원소를 너무 많이 집어넣거나 하는 경우가 있습니다.

    • Failed: 프로그램 실행 도중 에러가 발생해 시스템이 프로그램을 중단하는 경우입니다. 달리 말하자면 Runtime error입니다. Runtime error가 나는 경우는 대단히 많지만, competitive programming을 하다가 runtime error가 나는 경우는 대부분은 이런 경우들입니다.

      • Out-of-bounds, 특히 배열을 잘못 참조할 때
      • 0으로 나눌 때(Division by 0)
      • 재귀함수를 너무 많이 호출해서 스택이 터졌을 때(stack buffer overflow)
이런 식으로 코드를 올리면 시험도 해봐야겠죠? 이를 Invocations 또는 Stresses에서 진행 가능하지만, 아직은 할 수 없습니다. 제출한 코드가 내놓는 답(participant's solution)이 실제 답(jury's solution)과 일치하는지 확인해야 하기 때문입니다. 이는 Checker라는 프로그램이 담당합니다.