熱門文章

2025年4月2日 星期三

ZeroJudge 解題筆記:h658. 捕魚 (Fishing)

作者:王一哲
日期:2025年4月2日



ZeroJudge 題目連結:h658. 捕魚 (Fishing)

解題想法


用距離平方判斷是否在範圍內即可,不需要開根號。

Python 程式碼


使用時間約為 19 ms,記憶體約為 3.3 MB,通過測試。
import sys

for line in sys.stdin:
    x, y = map(int, line.split())  # 漁夫的座標
    n = int(input())  # n 筆資料
    ax, ay, d = 0, 0, float('inf')  # 最接近的魚群座標、距離的平方
    for _ in range(n):  # 執行 n 次
        xi, yi = map(int, input().split())  # 魚群座標
        di = (x - xi)**2 + (y - yi)**2  # 距離的平方
        if di < d:  # 如果距離較近,更新 ax, ay, d
            ax, ay, d = xi, yi, di
    print(ax, ay)


C++ 程式碼


使用時間約為 2 ms,記憶體約為 92 kB,通過測試。
#include <cstdio>
using namespace std;

int main() {
    int x, y;  // 漁夫的座標
    while(scanf("%d %d", &x, &y) != EOF) {
        int n; scanf("%d", &n);  // n 筆資料
        int ax = 0, ay = 0, d = 1000000000;  // 最接近的魚群座標、距離的平方
        for(int i=0; i<n; i++) {  // 執行 n 次
            int xi, yi; scanf("%d %d", &xi, &yi);  // 魚群座標
            int di = (x-xi)*(x-xi) + (y-yi)*(y-yi);  // 距離的平方
            if (di < d) {  // 如果距離較近,更新 ax, ay, d
                ax = xi; ay = yi; d = di;
            }
        }
        printf("%d %d\n", ax, ay);
    }
    return 0;
}


沒有留言:

張貼留言