소 자수

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

요약
반지름 d인 원과 N개의 직선이 주어질 때, 원 안에서 만나는 현 쌍의 개수를 센다. 원과 만나지 않는 직선은 무시한다.
난이도

보통10점 중 7점

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

문제

베시는 정교한 소 자수 기법에 빠졌습니다. 소들은 반지름이 정수 dd (1≤d≤50,0001 \le d \le 50{,}000)인 원형 수틀에 고정된 천에 수를 놓습니다. 소들은 실 NN개 (2≤N≤50,0002 \le N \le 50{,}000)를 놓는데, 각 실은 수틀 가장자리의 한 점에서 다른 한 점까지 곧게 이어진 직선입니다. 어떤 두 실의 끝점도 수틀 가장자리에서 같은 위치를 공유하지 않습니다.

수학을 좋아하는 베시는 각 실을 ax+by+c=0ax + by + c = 0 형태의 직선 방정식으로 나타냅니다. 계수 aa, bb, cc는 정수이며 −1,000,000≤a,b,c≤1,000,000-1{,}000{,}000 \le a, b, c \le 1{,}000{,}000을 만족하고, 모든 실에 대해 aa와 bb 중 적어도 하나는 0이 아닙니다. 완전히 똑같은 직선을 나타내는 두 실은 존재하지 않습니다.

아쉽게도 베시의 방정식 목록에는 실제로는 수틀 원의 내부를 지나지 않는 직선도 일부 포함되어 있습니다. 이러한 직선은 무시하면 됩니다.

원점 (0,0)(0,0)은 수틀의 정확한 중심이므로, 수틀 가장자리의 모든 점은 원점으로부터 거리가 dd입니다. 소 자수는 실이 더 많이 교차할수록 더 높이 평가됩니다. 천 위에서, 즉 원점으로부터 거리가 dd 이내인 점에서 교차하는 실 쌍의 개수를 세어 주세요. 만약 세 실이 모두 같은 점을 지난다면 이는 교차하는 쌍 3개로 셉니다. 네 실이 한 점을 지나면 6개의 쌍이 되는 식입니다.

입력

  • 첫째 줄: 두 정수 NN과 dd가 공백으로 구분되어 주어집니다.
  • 둘째 줄부터 N+1N+1째 줄까지: i+1i+1째 줄에는 실 ii를 나타내는 세 정수 aa, bb, cc가 주어집니다.

출력

  • 원점으로부터 거리가 dd 이내에서 교차하는 실 쌍의 개수를 정수 하나로 출력합니다.

힌트

예를 들어 d=1d = 1일 때 x=0x = 0 (직선 1 x+0 y+0=01\,x + 0\,y + 0 = 0)과 y=0y = 0 (직선 0 x+1 y+0=00\,x + 1\,y + 0 = 0)인 두 실을 생각해 봅시다. 두 실은 원점 (0,0)(0,0)에서 만나며, 그 점의 중심으로부터의 거리는 0≤1=d0 \le 1 = d이므로 이 쌍은 한 번 세어집니다.

예제3

  1. 예제 1

    입력
    2 1
    1 0 0
    0 1 0
    
    예상 출력
    1
    
  2. 예제 2

    입력
    2 5
    1 0 -1
    1 0 -2
    
    예상 출력
    0
    
  3. 예제 3

    입력
    3 10
    1 0 0
    0 1 0
    1 -1 0
    
    예상 출력
    3