practivceAlgorithm/백준

[백준][Python] 10000 원 영역

findTheValue 2021. 9. 8. 01:48

 

라인 스위핑. 큰걸 기준으로 작은걸 감싸냐 안감싸냐

왼쪽이 겹치면 재귀로 오른쪽 이 겹쳐지는 원이 나올때까지 재귀(큰 원 안에 원이 몇개 겹치나 조사하기 위함)

 

import sys
from bisect import bisect_left
input = sys.stdin.readline
sys.setrecursionlimit(400000)

def next_circle(cur_c,next_c):
    global cnt
    if circles[cur_c][1] == circles[next_c][1]:
        cnt += 1
        return
    tmp = bisect_left(circles,(circles[next_c][1],))
    if tmp == len(circles):
        return
    if circles[tmp][0]==circles[next_c][1]:
        next_circle(cur_c,tmp)


n = int(input())
circles = []
for i in range(n):
	x,r = map(int,input().split())
	circles.append((x-r,x+r))
circles.sort(key=lambda x:(x[0],-x[1]))

cnt = 0
for i in range(n-1):
	if circles[i][0] == circles[i+1][0]:
		next_circle(i,i+1)
print(n+cnt+1)