아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

스스로 교차하는 경로

시간 제한2초메모리 제한256 MB

요약
앞으로 이동한 뒤 항상 오른쪽으로 도는 로봇 경로가 스스로 닿는지 판정하고 유효한 가장 긴 앞부분을 출력합니다.
난이도

보통10점 중 7점

유형
기하, 시뮬레이션
정답자
아직 제출이 없습니다

문제

로봇 카렐이 미로 탈출 대회에 나간다. 카렐은 명령 NN개로 이루어진 프로그램을 실행한다. ii번째 명령은 "aia_i미터 앞으로 이동한 다음 오른쪽으로 90도 회전한다"를 뜻한다. 그래서 프로그램 전체는 명령마다의 이동 거리를 나열한 정수 수열 a1,a2,…,aNa_1, a_2, \dots, a_N으로 적는다.

로봇은 좌표 (0,0)(0, 0)에서 북쪽을 보고 출발한다. 프로그램이 1,2,3,4,51, 2, 3, 4, 5이면 로봇은 (−2,3)(-2, 3)에서 동쪽을 보고 멈춘다.

올바른 프로그램은 로봇이 그리는 경로가 자기 자신과 닿지 않는다. 연속한 두 명령이 그리는 두 선분은 사이의 꺾이는 점을 공유하는데, 이 점만은 예외로 허용한다. 그 밖에 두 선분이 공유하는 점이 하나라도 있으면, 한 점에서 스치기만 해도 그 프로그램은 올바르지 않다.

프로그램마다 올바른지 판정하고, 올바르지 않으면 앞에서부터 몇 개의 명령까지가 올바른 경로를 그리는지 구하라.

입력

입력은 여러 개의 테스트 케이스로 이루어지고 파일의 끝에서 끝난다. 각 테스트 케이스는 두 줄이다. 첫째 줄에 명령의 개수 NN (1≤N≤1061 \le N \le 10^6)이 주어진다. 둘째 줄에 프로그램을 나타내는 정수 NN개 a1,a2,…,aNa_1, a_2, \dots, a_N (1≤ai≤1091 \le a_i \le 10^9)이 공백으로 구분되어 주어진다.

출력

테스트 케이스마다 한 줄씩 출력한다. 주어진 프로그램의 경로가 자기 자신과 닿지 않으면 OK를 출력한다. 그렇지 않으면 정수 MM (0≤M<N0 \le M < N) 하나를 출력한다. MM은 명령 a1,a2,…,aMa_1, a_2, \dots, a_M으로 이루어진 프로그램의 경로가 자기 자신과 닿지 않는 가장 큰 값이다.

예제2

  1. 예제 1

    입력
    7
    3 1 1 3 2 2 6
    3
    2 1 1
    6
    2 1 4 4 4 3
    
    예상 출력
    3
    OK
    5
    
  2. 예제 2

    입력
    1
    7
    4
    1 1 1 1
    5
    1 1 2 2 1
    
    예상 출력
    OK
    3
    OK