题目链接:
题目大意:纸上有三个点a, b, c,问有没有可能找到另一个点,将纸张绕着这个点选择一定角度后a与原来的b点重复,b与原来的c点重复。
解题思路:由于旋转相当于在画弧,因此可以发现另外找的点到a, b, c的距离都相等。又由于旋转的角度一样,因此只要保证a, b, c不在同一条线上并且a,b距离等于b, c距离即可。
可能需要注意精度问题。
代码:
1 const double eps = 1e-9; 2 const double PI = acos(-1); 3 ll powmod(ll a, ll b) { ll res = 1; a %= mod; assert(b >= 0); for (; b; b >>= 1) { if (b & 1)res = res*a%mod; a = a*a%mod; }return res; } 4 const int iadd[] = { 0, 1, 0, -1}, jadd[] = { 1, 0, -1, 0}; 5 const int inf = 0x3f3f3f3f; 6 const int maxn = 1e6 + 5; 7 double ax, ay, bx, by, cx, cy; 8 9 void solve(){10 double tmp = (cx - bx) * (by - ay) - (bx - ax) * (cy - by);11 if(fabs(tmp) < eps){12 puts("No");13 return;14 }15 double d1 = (ax - bx) * (ax - bx) + (ay - by) * (ay - by);16 double d2 = (cx - bx) * (cx - bx) + (cy - by) * (cy - by);17 if(fabs(d1 - d2) < eps){18 puts("Yes");19 return;20 }21 puts("No");22 }23 int main(){24 scanf("%lf %lf %lf %lf %lf %lf", &ax, &ay, &bx, &by, &cx, &cy);25 solve();26 }
题目: