dong6788   3년 전

안녕하세요 풀어보던 중 질문글들을 읽어봐도 예외케이스가 없는 것 같아 질문 남깁니다

알고리즘은 모든 point 들(마지막 invalid(경계선 밖) point 하나 포함) 을 저장한 뒤,

iterate 하며 여태 나왔던 vertical, horizontal segment 들을 pair 로 저장해 두고


종료조건을

1. point 가 invalid 하거나

2. 여태 나왔던 segment들 중 직전 segment 를 제외한 자신과 수직인 segment 와 intersect 하거나 

3. 여태 나왔던 segment 들 중 자신과 평행이면서 같은 높이의 segment 와 intersect 할 때


로 설정하여 진행했습니다 (변수형은 long long 으로 했구요)

(처음에 마지막 명령까지 수행 후 직진하여 벽에 충돌한 다음 칸의 점을 넣어줘서 뱀이 자신에 충돌하지 않더라도 1.조건에서 끝나도록 했습니다)

반나절 정도 고민해 봤는데 안 떠올라서 구현 실수인가 의심도 되는데.. 코드가 더럽지만 한번 확인해주시면 넘나 감사할 것 같습니다 ㅠㅠ

3587jjh   3년 전

제 코드와 비교해서 랜덤으로 반례 데이터를 만들어보았습니다

<입력>

6 2
2 L
5 L

<ans>

16

<wa>

23

dong6788   3년 전

아.. 마지막 invalid point 만들 때 한 변의 길이가 L이라고 착각하여 진행방향으로 L+1 보내주면 밖으로 나갈 줄 알았는데 2L+1 을 더해줘야 하는 부분에서 실수가 났네요


55, 56 라인의 각각 3번째 L+1 부분을 2L+1 로 고쳐주니 해결되었습니다. 반례 찾아주셔서 감사합니다!!

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