Logo
(追記) (追記ここまで)

반례 부탁드립니다...

1107번 - 리모컨

제가 생각할 수 있는 모든 경우는 포함했다고 생각했는데, 계속 15%에서 오답처리 됩니다.
n이 최대 500000이므로 int형 오버플로우도 아닐테고.. 감이 안잡히네요

(앞에 DEBUG 처리한 코드들은 무시하셔도 됩니다.)

52 : n=100일 때, 이미 목표 채널이므로 0
59: 목표 채널에 고장난 키가 없으므로 그대로 입력하면 끝, 자리수가 정답
66: 모든 키가 고장, 100에서 출발해야 함

73~: 일반적인 케이스
76: 목표 채널부터 위로, 아래로 동시에 뻗어나가서 고장난 키를 포함하지 않는 채널까지 도달
82: 아래로 가서 음수에 도달하면 위로 가는 것이 정답이므로 그에 대한 처리
92: 목표 채널부터 이동한 거리가 100에서 이동하는 것보다 클 경우 후자를 정답으로 함
101, 107: 정답 방향에 따른 처리

-- 이후 다른 질문들에서 찾은 반례 --

- lower, higher중에 100이 발생하는 경우 정답보다 3 큰 값이 출력됨(해결 / 15%)
- 고장난 키가 없지만, 100에서 접근하는 것이 더 빠른 경우(해결 / 15%)

- 다음 예제에 대한 출력이 잘못됨 (https://www.acmicpc.net/board/... line 24) (해결 / 35%)
[contain 함수에 number = 0이 들어갈 때의 예외처리, 99줄 100에서 갈 때와 비교시에 등호 추가]
(해당 게시글의 반례 전부 해결했습니다. 여전히 35%)
0
2
0 1

In #1:
217
8
0 1 2 4 5 6 7 9
Out #1 :
119
Ans #1 : 
117 (100 번 채널에서 117번 + 눌러 217로 이동)
In #2 :
97
6
1 3 5 6 7 8
Out #2 :
4
Ans #2 :
3 ( 100 번 채널에서 3번 - 눌러 97로 이동)

출력 하는 곳 조건들을 보면,

if ( ... ) print

if ( ... ) print

이러한 형태인데,


if ( ... ) ans = min ( ans, ... )

if ( ... ) ans = min ( ans, ... )

print ans

최종적으로 한번 출력하면 조건에 따른 오류를 줄일 수 있을 것 같아요

제공해주신 반례들 덕분에 해결했습니다! 출력하는 방식 때문은 아니었고, 제가 생각하지 못한 edge case가 더 있었던 거였네요

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

(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /