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

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

복도 청소

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

요약
최대 500개의 콘센트마다 원 둘레를 따라 닦이는 고리 영역을 합친 전체 면적을 소수 둘째 자리까지 구합니다.
난이도

어려움10점 중 8점

유형
기하, 수학, 구간
정답자
아직 제출이 없습니다

문제

사람 NN명이 진공청소기 NN대로 바닥을 청소한다. 바닥 전체를 청소할 수 있을 것 같지만 그렇지 않다. 청소기는 바닥에 있는 콘센트에 연결해야 돌아가고, 전선 길이도 정해져 있다.

어떤 청소기의 전선 길이가 DD라면, 그 청소기를 쓰는 사람은 콘센트에서 최대 DD까지 떨어질 수 있다. 그런데 전선에 결함이 있어서 전선이 조금이라도 느슨해지면, 즉 사람과 콘센트의 거리가 DD보다 가까워지면 전원이 끊긴다. 그래서 사람은 콘센트에서 거리가 정확히 DD인 곳에만 서 있을 수 있다. 손잡이도 무거워서 청소기 헤드를 자기 위치에서 dd보다 멀리 밀어낼 수 없다.

정리하면 청소기 한 대는, 콘센트에서 거리가 정확히 DD인 곳에 선 사람으로부터 거리가 dd 이하인 바닥을 모두 청소한다.

청소기마다 DD와 dd, 그리고 연결된 콘센트의 좌표가 주어진다. 이렇게 배치했을 때 청소할 수 있는 바닥의 면적을 구하시오. 한 곳을 여러 사람이 청소할 수도 있으므로, 각자 청소한 면적을 더한 값이 아니라 합집합의 면적을 구해야 한다.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. (1≤T≤301 \le T \le 30)

각 테스트 케이스의 형식은 다음과 같다.

  • 첫 줄에 청소기의 개수 NN이 주어진다. (1≤N≤5001 \le N \le 500)
  • 이어지는 NN개 줄에 청소기 한 대를 나타내는 정수 네 개 xx, yy, DD, dd가 공백 하나로 구분되어 주어진다. (x,y)(x, y)는 콘센트의 좌표, DD는 전선 길이, dd는 사람과 청소기 헤드 사이의 거리다. (∣x∣,∣y∣≤1000|x|, |y| \le 1000, 0<D,d≤2000 < D, d \le 200)

출력

각 테스트 케이스마다 Case x: A 형식으로 한 줄씩 출력한다. xx는 1부터 시작하는 테스트 케이스 번호이고, AA는 청소할 수 있는 면적을 소수점 아래 둘째 자리까지 반올림한 값이다.

정확한 면적과 0.005+0.01k0.005 + 0.01k (kk는 정수) 꼴인 값의 차이는 항상 10−510^{-5}보다 크므로, 반올림한 값은 하나로 정해진다.

힌트

첫 번째 테스트 케이스에는 청소기가 한 대뿐이다. 콘센트가 (0,0)(0, 0)에 있고 D=10D = 10, d=1d = 1이므로 사람은 (0,0)(0, 0)을 중심으로 하는 반지름 10인 원 위를 돌아다닌다. 청소기는 사람으로부터 거리 1 이하인 곳을 청소하니, 청소되는 영역은 중심이 (0,0)(0, 0)이고 반지름이 9와 11인 두 원 사이의 고리다. 면적은 π×(112−92)=125.6637…\pi \times (11^2 - 9^2) = 125.6637\ldots이고, 출력은 125.66이다.

두 번째 테스트 케이스에는 청소기가 두 대 있다. 첫 번째 청소기는 (0,0)(0, 0)의 콘센트에 연결되어 반지름 6과 8 사이의 고리를 청소하고, 두 번째 청소기는 (13,0)(13, 0)의 콘센트에 연결되어 반지름 9와 11 사이의 고리를 청소한다. 두 고리가 겹치므로 합집합의 면적은 두 고리의 면적을 더한 값보다 작다.

예제2

  1. 예제 1

    입력
    2
    1
    0 0 10 1
    2
    0 0 7 1
    13 0 10 1
    
    예상 출력
    Case 1: 125.66
    Case 2: 205.47
    
  2. 예제 2

    입력
    3
    1
    0 0 4 4
    1
    0 0 3 5
    1
    0 0 1 1
    
    예상 출력
    Case 1: 201.06
    Case 2: 201.06
    Case 3: 12.57