원의 방정식을 이용해 해당 점이 원의 안에 있는지 밖에 있는지 판단하여 만나야하는 점의 개수를 파악했다.
1) 두 점이 한 원의 내부에 있는 경우
2) 두 점 모두 한 원의 밖에 있는 경우
3) 두 점 중 한 점만 한 원의 안에 있는 경우
import java.io.BufferedReader
import java.io.InputStreamReader
import kotlin.math.pow
val br = BufferedReader(InputStreamReader(System.`in`))
fun main() {
val testNum = br.readLine().trim().toInt()
val ansList = mutableListOf<Int>()
for (i in 0 until testNum) {
val (x1,y1, x2,y2) = br.readLine().trim().split(" ")
val points = listOf(Point(x1.toInt(),y1.toInt()), Point(x2.toInt(),y2.toInt()))
val plantNum = br.readLine().trim().toInt()
val plantList = mutableListOf<Plant>()
repeat(plantNum) {
val (cx, cy, r) = br.readLine().trim().split(" ")
plantList.add(Plant(cx.toInt(), cy.toInt(), r.toInt()))
}
var ans = 0
plantList.forEach { plant ->
var meet = 0
points.forEach { point ->
meet += checkInAndOut(point, plant)
}
if (meet == 1) {
ans++
}
}
ansList.add(ans)
}
ansList.forEach {
println(it)
}
}
fun checkInAndOut(point: Point, plant: Plant): Int {
val left = (point.x - plant.cx).toFloat().pow(2) + (point.y - plant.cy).toFloat().pow(2)
val right = plant.r.toFloat().pow(2)
return if (left <= right) 1 else 0
}
data class Plant(val cx: Int, val cy: Int, val r: Int)
data class Point(val x:Int, val y: Int)