NOJ 일반적인 오류 및 해결 방법

나의 현재 경험과 반 친구들이 겪은 문제를 바탕으로 이 기사에서는 NOJ 문제에서 자주 발생하는 오류와 해당 솔루션을 요약합니다.

다른 오류 메시지가 나타나면 번호 순서에 따라 하나씩 신속하게 문제를 해결할 수 있습니다.

WA

  1. 출력 형식 오류: 샘플에 필요한 출력 형식을 주의 깊게 확인하여 출력이 더 많거나 적는지 확인하세요. 출력 내용이 많을수록 OE여야 하지만 현재는 WA로 메시지가 표시됩니다.
  2. 알고리즘 오류: 테스트할 샘플을 찾습니다. 주로 알고리즘이 문제 해결 목표를 달성하지 못하기 때문이지만 입력 읽기 오류도 포함됩니다(문제 입력 형식을 올바르게 읽을 수 없으며 입력 범위가 고려되지 않음). 초기화가 필요합니다. 초기화되지 않았습니다. 입력 또는 출력 형식 문자가 일치하지 않습니다. 유형이 잘못되었습니다.
  3. 극단값은 고려되지 않습니다. 0으로 나누기 모듈로 0 연산, 알고리즘 실패를 유발할 수 있는 일부 특수 값 등 가능한 극단값을 테스트합니다.
  4. Out-of-bounds : 위의 오류가 제거된 후, 문제에 입력 범위가 주어지지 않고, 더 작은 표본이라도 맞다면 변수는 out-of-bound로 간주됩니다.

이것

  1. 구문 오류(좋은 IDE가 필요할 수 있음): CB는 많은 문법 오류를 보고하지 않습니다.
  2. 헤더 파일이 없습니다. 호출된 라이브러리 함수와 매크로를 확인하세요.
  3. 비표준 사용법: 비표준 라이브러리 도입 등. (동급생의 코드가 실제로 windows.h를 사용하는 것을 봤습니다)
  4. 스택 오버플로: 재귀가 너무 깊으면 함수에서 큰 배열이 열립니다. 일반적으로 ME여야 하지만 현재 일부 프롬프트는 CE입니다.
  5. 무한 루프: 디버깅 루프 구조, 일반적으로 TE여야 하지만 현재 일부 프롬프트는 CE입니다.
  6. 메모리 누수: 포인터를 잘못 사용했습니다.
  7. 제한된 함수 호출: 예를 들어, rand()가 반복적으로 호출될 때 srand(time(NULL))은 사용되지 않습니다. 이는 매우 드뭅니다.

답장

  1. 불법 메모리 액세스: 범위를 벗어난 배열, 와일드 포인터 호출, 시스템 예약 메모리 액세스 등
  2. 스택 오버플로: 이전과 동일하며 일반적으로 ME여야 하지만 현재 일부 프롬프트는 RE입니다.
  3. 메모리 누수: 위와 동일합니다.
  4. 무한 루프: 이전과 동일하며 일반적으로 TE여야 하지만 현재 일부 프롬프트는 RE입니다.
  5. 모듈로 0 또는 0으로 나누기: 현재 프롬프트는 WA입니다.

그만큼

  1. 무한 루프
  2. 알고리즘을 최적화해야 합니다: 알고리즘의 시간 복잡도를 추정합니다. 일반적으로 OJ 시간 판단 기준은 다음과 같습니다(예: 1000ms).
  • O(\로그n) 시간 초과되지 않음
  • O(n), n\leq 10^8
  • O(n\log n), n \leq 10^6
  • O(n^{1.5}), n\leq 10^5
  • O(n^2), n\leq 5\times 10^3
  • O(n^3), n\leq 300
  • O(2^n), n\leq 25
  • O(3^n), n\leq 15
  • O(n!), n\leq 10

추천

출처blog.csdn.net/annesede/article/details/133838416