jlj425   8년 전

음... long long을 double로 변환 할 때, 틀리는 건가요?

아니면 다른데 제가 놓치는 부분이 있나요?

실행을 시켜 볼 수가 없어서 너무 답답하네요.


우선 제 코드를 설명하자면 일단 모든 vector들의 x좌표의 합(이 값을 SX라고하겠습니다)과 y좌표의 합(이 값을 SY라고하겠습니다)을 구합니다.

그 후, N개의 vector 중에서 N/2개를 뽑는 겁니다.

그리고 뽑은 vector들의 x좌표 끼리 다 더하고 y좌표는 y좌표끼리 다 더합니다.

그러면 SX에서 2*(x좌표들의 합)을 빼고 SY에서 2*(y좌표들의 합)을 빼면 vector들의 합이 만들어집니다.

여기서 구한 vector 길이의 최솟값을 찾는다는게 제 생각입니다만 잘 안되네요;;

portableangel   8년 전

VECTOR_MATCHING 함수 내에서 left=N/2, index=N-1인 상태로 호출되면 ans를 계산할 일이 한 번도 없어 ans로 -1을 반환하고,

이 값이 최종적으로 MIN 함수를 통해 반환되어 sqrt(-1)을 출력하게 되는 듯합니다.

pit4nya   7년 전

이 문제에서 ans를 -1로 초기화 할 시 sqrt(-1)이 들어오는 경우가 생기기 때문에 몇가지 경우에 대해 정확한 답이 나오지 않습니다.

그러므로 ans를 long long의 최대 값인 9223372036854775807로 초기화 하여 두 군데만 수정해 주면 제대로 된 답이 나오게 됩니다.

알고리즘은 맞습니다.


return (a == 9223372036854775807) ? b : (a>b) ? b : a; 이 부분과 long long ans = 9223372036854775807; 이부분을 수정해주면 제대로 된 답이 나오게 됩니다.

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