战争尾声
题目链接:nowcoder 215073
到牛客看:
题目大意
有一堆点在一个 200×200 的网格中,坐标为整数,问你是否存在一个整数坐标的点,让所有点到它的距离相等。
相等就是两短距离差的绝对值小于 0.0001。
思路
因为题目说所有的点都在整数坐标撒花姑娘,而且只有 40000 40000 40000 个整数点,就不如直接枚举每一个点,看它跟每个给的点的距离是否相等。
(判断两点之间的距离用勾股定理: a 2 + b 2 = c 2 a^2+b^2=c^2 a2+b2=c2)
然后记得判断相等不是之间相等,而是要绝对值小于 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;
}