xkdlaldfjtnl   2년 전

스포일러 방지를 위해서 링크로 첨부합니다.

https://www.acmicpc.net/source...

이 코드에서 54번째 줄부터 high와 low 모두 long long 자료형으로 했고, 처음 설정한 high 값의 두배가 long long 범위 내이기 때문에 오버플로우가 

발생하지 않아야 한다고 생각하는데 모두 동일한 코드에 high의 값만 줄인 코드가 AC인걸 보니 오버플로우로 인한 WA인 것 같습니다.

왜 오버플로우가 발생하는 걸까요..? ㅠ 

WeissBlume   2년 전

sum += i.first*max(1LL, (a-i.second));
sum += ll(1e9)*ll(1e10-1);

9'223'372'036'854'775'808 < 9'999'999'999'000'000'000
~~~~~~~~~~~~~~~~~~~~~~~~~   ~~~~~~~~~~~~~~~~~~~~~~~~~
      19 digits                     19 digits

http://boj.kr/60d573eeadb342aa...

곱셈의 결과가 부호 있는 64비트 정수의 표현 범위를 초과합니다. 한편 부호 없는 64비트 정수의 범위는 넘어가지 않습니다.

xkdlaldfjtnl   2년 전

@WeissBlume 정말 감사합니다. 곱하기가 있다는 생각을 못 했었네요

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