79brue   3년 전

문제점은

  1. 입력 쿼리로 a=1일 때 b, a=2일 때 b와 c의 범위 제한이 제대로 되어 있지 않습니다.
  2. 2^63-1 = X라고 표기할 때, 배열의 원소가 X X X X X -X -X -X -X -X이고 쿼리가 [1 10]에 주어지는 상황은 문제 조건에 전혀 위배되지 않지만, C나 C++ 등을 사용할 경우 일반적인 방법으로 풀 수 없습니다.

1번 문제는 입력 부분 지문만 개선하면 됩니다.

제가 데이터를 정확히 알지 못하기 때문에 2번 문제에 대해서는 해결 방안을 정확히 알 수 없습니다. 도와주신다면 감사하겠습니다.

wjdclgns12   3년 전

1. "입력으로 주어지는 모든 수는 -263보다 크거나 같고, 263-1보다 작거나 같은 정수이다." 에서 입력에 b, c의 범위도 포함되어 있다고 생각합니다.

2. 정답이 -263보다 크거나 같고, 263-1보다 작거나 같은 정수이므로, 일반적으로 푸는데 문제가 없습니다.

연산 도중에 특정 원소의 값이 overflow될 수 있지만, 답이 long long 범위 내라고 했으므로 해당 원소의 값을 출력하는 쿼리가 주어졌을 때는 올바른 값을 가지고 있을겁니다.

79brue   3년 전

1. b, c의 범위는 1 <= b, c <= N으로 명시가 필요합니다.

2. 조금 찜찜하긴 하지만 풀리긴 하겠네요. 지적해 주셔서 감사합니다.

jh05013   3년 전

오버플로우는 undefined behavior이기 때문에, 대부분의 정답 코드는 undefined behavior를 일으킵니다. 그래서 이런 문제들을 어떻게 처리해야 하나 고민한 적이 있었는데, 데이터가 잘못된 것이 아니고 채점에 쓰는 컴파일러의 버전도 공개되어 있기 때문에 그냥 넘어가기로 (혼자) 결론지었습니다.

startlink   3년 전

수정했습니다.

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