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

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

원의 합집합에 포함된 격자점 개수

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

요약
최대 10,000개의 원 합집합에 포함되는 정수 격자점을 좌표 범위 -16383 이상 16384 이하에서 센다.
난이도

어려움10점 중 8점

유형
기하, 정렬, 완전 탐색, 구현
정답자
아직 제출이 없습니다

문제

정수 좌표를 갖는 원이 여러 개 주어진다. 각 원의 중심 좌표와 반지름은 모두 정수이다. 이 원들의 합집합에 포함되는, 정수 좌표를 갖는 점의 개수를 출력하는 프로그램을 작성하여라.

예를 들어 아래 그림에서 작은 원(중심 (1,1)(1,1), 반지름 11)은 점 55개를 포함하고, 큰 원(중심 (2,2)(2,2), 반지름 22)은 점 1313개를 포함하며, 두 원의 합집합은 점 1515개를 포함한다. 원의 경계 위에 정확히 놓인 점도 그 원에 포함되는 것으로 본다.

추가 조건으로, 프로그램은 xx좌표와 yy좌표가 모두 −(214−1)-(2^{14}-1) 이상 2142^{14} 이하, 즉 −16383-16383 이상 1638416384 이하의 정수인 점만 세어야 한다. 원이 이 영역의 경계 밖으로 뻗어 나갈 수는 있지만, 이 영역 밖의 점은 세면 안 된다.

입력

입력은 여러 개의 데이터 집합으로 이루어진다. 각 데이터 집합은 원의 개수만큼의 줄로 구성되며, 한 줄이 원 하나를 나타낸다. 각 줄에는 공백으로 구분된 세 정수가 있으며, 차례로 원의 중심의 xx좌표, yy좌표, 반지름이다. 한 데이터 집합의 끝은 세 개의 00으로 이루어진 줄 0 0 0으로 표시된다. 한 데이터 집합에는 원이 최대 10,000개까지 있다. 원이 하나도 없는(즉 0 0 0이 곧바로 나오는) 데이터 집합은 전체 입력의 끝을 나타낸다.

출력

각 데이터 집합마다 Problem #n:을 출력한 뒤, 공백 한 칸과 그 집합의 답(합집합에 포함되는 점의 개수)을 이어서 출력한다. 여기서 nn은 데이터 집합의 번호이며 11부터 시작한다.

예제4

  1. 예제 1

    입력
    1 1 1
    2 2 2
    0 0 0
    -16383 -16383 2
    0 0 0
    0 0 0
    
    예상 출력
    Problem #1: 15
    Problem #2: 6
    
  2. 예제 2

    입력
    0 0 1
    0 0 0
    0 0 0
    
    예상 출력
    Problem #1: 5
    
  3. 예제 3

    입력
    0 0 2
    0 0 0
    0 0 0
    
    예상 출력
    Problem #1: 13
    
  4. 예제 4

    입력
    0 0 1
    0 0 0
    -16383 -16383 2
    16384 16384 2
    0 0 0
    5 5 0
    0 0 0
    0 0 0
    
    예상 출력
    Problem #1: 5
    Problem #2: 12
    Problem #3: 1