울타리 만들기

시간 제한1초메모리 제한128 MB

요약
정수 반지름과 간격의 각 쌍마다 판을 다시 녹여 가며 뚫는 구멍 수를 세고, 모든 쌍에 대한 C(d,r,S)의 합을 구한다.
난이도

어려움10점 중 8점

유형
수학, 구현, 시뮬레이션, 완전 탐색
정답자
아직 제출이 없습니다

문제

하카(Haka) 시는 교통 체증으로 유명하다. 꽉 막힌 도로 위에서 하염없이 시간을 보내던 시민들 중 많은 이가 문제 출제자가 되었다. 하카의 넓은 도로 중앙 분리대에는 타공 강판으로 만든 울타리가 늘어서 있는데, 이 문제는 그 강판을 만드는 과정을 다룬다.

모든 타공 강판(strip)에는 각 행마다 정확히 두 개의 원형 구멍이 뚫린다. 패턴 규칙은 다음과 같다.

  • 모든 구멍은 반지름이 rr인 원이다.
  • 같은 행에 있는 두 구멍은 서로 2d2d만큼 떨어져 있고, 같은 열에서 이웃한 두 구멍도 서로 2d2d만큼 떨어져 있다.
  • 모든 구멍에서 가장 가까운 변까지의 거리는 dd이다.

이 규칙에 따라 강판의 너비(width)는 항상 4d+4r4d + 4r가 된다. 처음 강판의 길이(length)는 SS이다.

구멍은 위 규칙에 맞게 완전한 원을 놓을 수 있는 곳에만 뚫는다. 한 강판에 구멍을 다 뚫고 나면, 구멍에서 떼어낸 원판 조각들과 강판의 남는 부분(예를 들어 작업이 끝난 영역의 아래쪽)을 함께 녹여 같은 너비 4d+4r4d + 4r의 새 강판으로 다시 만든다. 이 새 강판에도 같은 규칙으로 구멍을 뚫고, 이 과정을 반복한다. 새로 만든 강판이 너무 짧아 두 구멍짜리 행을 하나도 넣을 수 없게 되면 과정을 멈춘다.

전체 과정에서 뚫은 구멍의 총 개수를 C(d,r,S)C(d, r, S)라 하자. 최소 반지름 rminr_{min}, 최대 반지름 rmaxr_{max}, 최소 간격 dmind_{min}, 최대 간격 dmaxd_{max}, 길이 SS가 주어질 때 다음 값을 구하라.

∑r=rminrmax∑d=dmindmaxC(d,r,S)\sum_{r=r_{min}}^{r_{max}}\sum_{d=d_{min}}^{d_{max}} C(d, r, S)

여기서 dd와 rr는 항상 정수이다. 처음 강판과 이후에 다시 만든 모든 강판은 어디서나 두께가 균일하고 서로 같다고 가정한다. 풀이는 충분히 효율적이어야 한다.

타공 강판

입력

입력은 최대 1000개의 데이터 집합으로 이루어진다. 각 데이터 집합은 다섯 개의 정수 rminr_{min}, rmaxr_{max}, dmind_{min}, dmaxd_{max}, SS가 한 줄에 주어진다. 범위는 5000≤rmin≤100005000 \le r_{min} \le 10000, 0≤rmax−rmin≤10000 \le r_{max} - r_{min} \le 1000, 1≤dmin≤211 \le d_{min} \le 21, 0≤dmax−dmin≤1000 \le d_{max} - d_{min} \le 100, 1000000≤S≤20000000001000000 \le S \le 2000000000이며 rr와 dd는 모두 정수이다.

입력의 끝은 다섯 개의 0으로 이루어진 줄로 표시되며, 이 줄은 처리하지 않는다.

출력

각 데이터 집합에 대해 다음 정수를 한 줄에 출력한다.

∑r=rminrmax∑d=dmindmaxC(d,r,S)\sum_{r=r_{min}}^{r_{max}}\sum_{d=d_{min}}^{d_{max}} C(d, r, S)

답은 부호 있는 64비트 정수에 충분히 들어간다.

예제2

  1. 예제 1

    입력
    9682 9719 18 29 71757646
    5746 5958 19 24 1942485264
    0 0 0 0 0
    
    예상 출력
    15404518
    1918408970
    
  2. 예제 2

    입력
    5000 5000 1 1 1000000
    0 0 0 0 0
    
    예상 출력
    922