战争尾声

题目链接:nowcoder 215073

到主站看:https://blog.csdn.net/weixin_43346722/article/details/113064064

题目大意

有一堆点在一个 200×200 的网格中,坐标为整数,问你是否存在一个整数坐标的点,让所有点到它的距离相等。
相等就是两短距离差的绝对值小于 0.0001。

思路

因为题目说所有的点都在整数坐标撒花姑娘,而且只有 个整数点,就不如直接枚举每一个点,看它跟每个给的点的距离是否相等。
(判断两点之间的距离用勾股定理:

然后记得判断相等不是之间相等,而是要绝对值小于 1e-4。

代码

#include<cstdio>
#include<cmath>

using namespace std;

int n;
double x[201], y[201], dis;
bool no, yes;

double get_dis(double x, double y, double xx, double yy) {
    return sqrt((x - xx) * (x - xx) + (y - yy) * (y - yy));
}//通过勾股定理得出两点之间的距离

double abss(double x) {
    if (x < 0) return -x;
    return x;
}

int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%lf %lf", &x[i], &y[i]);
    }

    for (int i = 1; i <= 200; i++)
        for (int j = 1; j <= 200; j++) {//枚举网格上的每一个点
            dis = get_dis(1.0 * i, 1.0 * j, x[1], y[1]);
            no = 0;
            for (int k = 2; k <= n; k++) {
                if (abss(dis - get_dis(1.0 * i, 1.0 * j, x[k], y[k])) >= 1e-4) {
                    no = 1;
                    break;
                }
            }
            if (!no) {
                printf("%d %d", i, j);
                return 0;
            }
        }

    printf("War is cruel.");

    return 0;
}