midori   1년 전

이동 (1067), 큰 수 곱셈 3 (22289)과 같은 fft코드를 썼는데 예제 입력마저도 다르게 나옵니다..

fft 코드가 잘못된건가요? 아니면 구현 자체가 잘못된건가요..?

slah007   1년 전

일단 질문이 성립이 안됩니다.

문제에 따라 풀이가 달라지고 fft를 어떻게 적용하는지가 달라질 수 있어서 단순히 fft를 썼다로 풀이를 설명할수가 없습니다.

이런 방식으로 식을 세우고 이걸 계산하기 위해 fft를 사용했다는 과정을 설명해 주세요.

midori   1년 전

@slah007 죄송합니다. 질문이 처음이라 많이 미흡합니다..

문제에서 요구하는 값(보낼수 있는 경우의 수)을 구하기 위해 다항식(arr) 안에 계수(n) 이 있다면 arr[n] = 1 없다면 arr[n] = 0으로 만들었습니다.

다항식의 제곱 을 계산한 결과(res)를 저장하고

res[i]가 0이라면 보낼 수 없으므로 res[i] > 0인 경우에만 cnt를 1씩 더해주며 

결과로 cnt = 문제의 답을 출력하게 코드를 짰습니다.

여기서 arr을 제곱할때 fft로 구현했으나 답이 원하는대로 출력이 되지 않아 질문을 남겼습니다.

slah007   1년 전

다시 보니까 제가 말을 좀 세게 한 거 같기도 하네요 그래도 설명을 적어야 읽는 사람이 코드가 확실하게 이해가 되고 답변도 잘 받을 수 있습니다.

제 생각에도 x[i]+x[j]로 나올 수 있는지를 찾으려면 이렇게 x[k[i]]=1로 이루어진 다항식을 제곱하는게 맞는 것 같은데 실수 오차 등의 문제로 보입니다.

res[(int)input()] > 0 대신 (int)res[(int)input()] > 0 등으로 반올림을 하고 다시 실행해 보세요.

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