import mathx0, y0, r = map(int, input().split())n = int(input())watered = 0far = 0 # 가장 먼 화분까지 거리의 제곱for _ in range(n): x, y = map(int, input().split()) d2 = (x - x0) ** 2 + (y - y0) ** 2 # 제곱끼리 비교하면 정수만으로 정확하다 if d2 <= r ** 2: watered += 1 far = max(far, d2)s = math.isqrt(far) # 정수 제곱근(내림)if s * s < far: s += 1 # 올림print(watered)print(max(r, s))
JavaScriptmain.js · 13 行
const [x0, y0, r, n, ...pts] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);let watered = 0;let far = 0; // 가장 먼 화분까지 거리의 제곱for (let i = 0; i < n; i++) { const d2 = (pts[2 * i] - x0) ** 2 + (pts[2 * i + 1] - y0) ** 2; // 8×10^10 이하라 number로 정확하다 if (d2 <= r ** 2) watered++; far = Math.max(far, d2);}let s = Math.floor(Math.sqrt(far));while (s * s > far) s--; // 실수 제곱근이 한 칸 어긋나도 바로잡는다while ((s + 1) * (s + 1) <= far) s++;if (s * s < far) s++; // 올림console.log(watered + "\n" + Math.max(r, s));
TypeScriptmain.ts · 14 行
import { readFileSync } from "node:fs";const [x0, y0, r, n, ...pts]: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);let watered = 0;let far = 0; // 가장 먼 화분까지 거리의 제곱for (let i = 0; i < n; i++) { const d2: number = (pts[2 * i] - x0) ** 2 + (pts[2 * i + 1] - y0) ** 2; // 8×10^10 이하라 number로 정확하다 if (d2 <= r ** 2) watered++; far = Math.max(far, d2);}let s: number = Math.floor(Math.sqrt(far));while (s * s > far) s--; // 실수 제곱근이 한 칸 어긋나도 바로잡는다while ((s + 1) * (s + 1) <= far) s++;if (s * s < far) s++; // 올림console.log(watered + "\n" + Math.max(r, s));
JavaMain.java · 23 行
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long x0 = sc.nextLong(), y0 = sc.nextLong(), r = sc.nextLong(); int n = sc.nextInt(); int watered = 0; long far = 0; // 가장 먼 화분까지 거리의 제곱 for (int i = 0; i < n; i++) { long dx = sc.nextLong() - x0, dy = sc.nextLong() - y0; long d2 = dx * dx + dy * dy; // long이라야 넘치지 않는다(최대 8×10^10) if (d2 <= r * r) watered++; far = Math.max(far, d2); } long s = (long) Math.sqrt(far); while (s * s > far) s--; // 실수 제곱근이 한 칸 어긋나도 바로잡는다 while ((s + 1) * (s + 1) <= far) s++; if (s * s < far) s++; // 올림 System.out.println(watered); System.out.println(Math.max(r, s)); }}
C#Main.cs · 28 行
using System;using System.Linq;class Program{ static void Main() { long[] first = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(long.Parse).ToArray(); long x0 = first[0], y0 = first[1], r = first[2]; int n = int.Parse(Console.ReadLine()); int watered = 0; long far = 0; // 가장 먼 화분까지 거리의 제곱 for (int i = 0; i < n; i++) { long[] p = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(long.Parse).ToArray(); long dx = p[0] - x0, dy = p[1] - y0; long d2 = dx * dx + dy * dy; // long이라야 넘치지 않는다(최대 8×10^10) if (d2 <= r * r) watered++; far = Math.Max(far, d2); } long s = (long)Math.Sqrt(far); while (s * s > far) s--; // 실수 제곱근이 한 칸 어긋나도 바로잡는다 while ((s + 1) * (s + 1) <= far) s++; if (s * s < far) s++; // 올림 Console.WriteLine(watered); Console.WriteLine(Math.Max(r, s)); }}
C++main.cpp · 24 行
#include <algorithm>#include <cmath>#include <iostream>int main() { long long x0, y0, r; int n; std::cin >> x0 >> y0 >> r >> n; int watered = 0; long long far = 0; // 가장 먼 화분까지 거리의 제곱 for (int i = 0; i < n; i++) { long long x, y; std::cin >> x >> y; long long dx = x - x0, dy = y - y0; long long d2 = dx * dx + dy * dy; // long long이라야 넘치지 않는다(최대 8×10^10) if (d2 <= r * r) watered++; far = std::max(far, d2); } long long s = static_cast<long long>(std::sqrt(static_cast<double>(far))); while (s * s > far) s--; // 실수 제곱근이 한 칸 어긋나도 바로잡는다 while ((s + 1) * (s + 1) <= far) s++; if (s * s < far) s++; // 올림 std::cout << watered << '\n' << std::max(r, s) << '\n';}
Cmain.c · 24 行
#include <math.h>#include <stdio.h>int main(void) { long long x0, y0, r; int n; scanf("%lld %lld %lld %d", &x0, &y0, &r, &n); int watered = 0; long long far = 0; // 가장 먼 화분까지 거리의 제곱 for (int i = 0; i < n; i++) { long long x, y; scanf("%lld %lld", &x, &y); long long dx = x - x0, dy = y - y0; long long d2 = dx * dx + dy * dy; // long long이라야 넘치지 않는다(최대 8×10^10) if (d2 <= r * r) watered++; if (d2 > far) far = d2; } long long s = (long long)sqrt((double)far); while (s * s > far) s--; // 실수 제곱근이 한 칸 어긋나도 바로잡는다 while ((s + 1) * (s + 1) <= far) s++; if (s * s < far) s++; // 올림 printf("%d\n%lld\n", watered, s > r ? s : r); return 0;}
Craykonmain.cray · 34 行
first = 控制台.读数字();x0 = first[0];y0 = first[1];r = first[2];n = 控制台.读行().转数字();watered = 0;far = 0; // 가장 먼 화분까지 거리의 제곱循环 (i = 0; i < n; i++){ p = 控制台.读数字(); dx = p[0] - x0; dy = p[1] - y0; d2 = dx * dx + dy * dy; // 거듭제곱 연산자가 없으니 곱해서 제곱한다 如果 (d2 <= r * r) { watered += 1; } far = 数学.较大值(far, d2);}s = 数学.向下取整(数学.平方根(far));当 (s * s > far){ s -= 1; // 실수 제곱근이 한 칸 어긋나도 바로잡는다}当 ((s + 1) * (s + 1) <= far){ s += 1;}如果 (s * s < far){ s += 1; // 올림}控制台.输出(watered);控制台.输出(数学.较大值(r, s));